def irk(bot, trigger): logger = logging.getLogger('sopel') logger.info('Starting irker socket on port %d.', bot.config.irker.listen_port) sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind(("127.0.0.1", bot.config.irker.listen_port)) while True: data, addr = sock.recvfrom(1024) try: obj = json.loads(data) to = [obj['to']] if isinstance(obj['to'], str) else obj['to'] for url in to: parsed_url = urlparse(url) channel = '#{}'.format(parsed_url.fragment if parsed_url. path == '/' else parsed_url.path) logger.debug('Sending `%s` to `%s`', obj['privmsg'], channel) bot.say(obj['privmsg'], channel) except ValueError: logger.info('Unable to decode input Received: %s.', data)
def invite_player(bot, trigger): bot.say("Welcome to the game " + trigger.group(1) + ", here's 50 sf::Tokens!") bot.playerdb.set_nick_value(trigger.group(1), "balance", 50) bot.playerdb.set_nick_value(trigger.group(1), "health", 50) bot.playerdb.set_nick_value(trigger.group(1), "attack", 50) bot.playerdb.set_nick_value(trigger.group(1), "defense", 50)
def list_locations(bot, trigger): bot.reply( "There are many weird and wonderful places in Shit Foot Mongo Land, I have sent you them in a private message" ) count = 0 for location in locations: bot.say(str(count + 1) + ": " + locations[count], trigger.nick) count += 1
def fight(bot, trigger): attackerBalance = bot.playerdb.get_nick_value(trigger.nick, "balance") if attackerBalance is None: bot.reply("You are not part of the game :(") return defenderBalance = bot.playerdb.get_nick_value(trigger.group(1), "balance") if defenderBalance is None: bot.reply(trigger.group(1) + " is not part of the game :(") return if trigger.nick == trigger.group(1): bot.reply("You hurt yourself and lost one sf::Token") bot.playerdb.set_nick_value(trigger.nick, "balance", int(attackerBalance) - 1) return #check they haven't already fought in the last 5 mins lastFightTime = bot.playerdb.get_nick_value(trigger.nick, trigger.group(1)) if lastFightTime is not None: if lastFightTime > time.time() - 300: bot.reply("Don't be such a bully") return bot.playerdb.set_nick_value(trigger.nick, trigger.group(1), time.time()) attackerAttack = bot.playerdb.get_nick_value(trigger.nick, "attack") if attackerAttack is None: attackerAttack = 50 bot.playerdb.set_nick_value(trigger.nick, "attack", attackerAttack) defenderDefense = bot.playerdb.get_nick_value(trigger.group(1), "defense") if defenderDefense is None: defenderDefense = 50 bot.playerdb.set_nick_value(trigger.group(1), "defense", defenderDefense) result = random.randint(0, int(attackerAttack) + int(defenderDefense)) if result < attackerAttack: winner = trigger.nick loser = trigger.group(1) else: winner = trigger.group(1) loser = trigger.nick bot.say(winner + " was victorious! They won 1 sf::Token from " + loser) winnerbalance = bot.playerdb.get_nick_value(winner, "balance") loserbalance = bot.playerdb.get_nick_value(loser, "balance") bot.playerdb.set_nick_value(winner, "balance", winnerbalance + 1) bot.playerdb.set_nick_value(loser, "balance", loserbalance - 1) winnerWins = bot.playerdb.get_nick_value(winner, "wins") loserLosses = bot.playerdb.get_nick_value(loser, "losses") if winnerWins is None: winnerWins = 0 if loserLosses is None: loserLosses = 0 bot.playerdb.set_nick_value(winner, "wins", int(winnerWins) + 1) bot.playerdb.set_nick_value(loser, "losses", int(loserLosses) + 1)
def latest_tweet_display(bot, trigger): """Displays latest tweet.""" with open('/var/www/py/tweets.txt', 'w') as pretwits: pretwits.close() user = '******' statuses = api.GetUserTimeline(screen_name=user) for tweet in reversed(statuses): with open('/var/www/py/tweets.txt', 'w') as twits: twits.write(tweet.text) twits.close() twitsy = open('/var/www/py/tweets.txt', 'r').readlines()[0] bot.say('Latest tweet:' + twitsy)
def vote_on_tweet(bot, trigger): """Allows users to vote on a selected tweet.""" if not trigger.group(2): bot.reply('Vote for WHICH tweet?') tweetNumber = trigger.group(2) userName = trigger.nick #opens tweet# selectedTweet = '/var/www/py/tweets/tweet' + str(tweetNumber) + '.txt' voteLog = '/var/www/py/tweets/tweet' + str(tweetNumber) + '.log' votePopFile = '/var/www/py/tweets/tweet' + str(tweetNumber) + '.pop' voteCount = '/var/www/py/tweets/tweet' + str(tweetNumber) + '.cnt' # the following section needs repair # it is supposed to check whether the nick already appears # if it is already appears, it is supposed to prevent the vote with open(voteLog, 'a+') as logVote: voterLog = logVote.read() if voterLog.find(userName) != -1: bot.reply('You have already voted or you proposed this f*****g tweet, you cheat!') else: logVote.write('\n' + userName) with open(voteCount, 'r+') as voting: rawVoteCnt = [line.rstrip('\n') for line in voting] for line in rawVoteCnt: currentCount = int(line) currentCount += 1 voting.write(str(currentCount)) with open(selectedTweet, 'r+') as f: rawTweetCnts = [line.rstrip('\n') for line in f] for line in rawTweetCnts: tweetText = line newVoteCount = str(currentCount) #checks vote count against userCount with open(votePopFile) as f3: votePop = f3.readline() neededVotes = float(votePop) * 0.8 if neededVotes < int(currentCount): approved_tweet = True else: approved_tweet = False if approved_tweet != True: bot.reply('Your vote has been cast for tweet #' + str(tweetNumber) + '. Tweet currently has ' + str(newVoteCount) + ' votes.') elif approved_tweet is True: bot.reply('Your vote has allowed ' + str(tweetNumber) + '-- "' + str(tweetText) + '" --' + 'to be posted at http://twitter.com/realWoodcoin') api.PostUpdate(tweetText) bot.say('To check latest tweet, use .toptweet') logdate = str(datetime.date.today().strftime("%j")) lognow = str(datetime.datetime.now().strftime("%H%M")) if not os.path.exists('/var/www/py/tweets/archived/' + logdate): os.mkdir('/var/www/py/tweets/archived/' + logdate) shutil.move(selectedTweet, '/var/www/py/tweets/archived/' + logdate + '/' + tweetNumber + '-' + lognow + '.txt') shutil.move(voteLog, '/var/www/py/tweets/archived/' + logdate + '/' + tweetNumber + '-' + lognow + '.log') shutil.move(votePopFile, '/var/www/py/tweets/archived/' + logdate + '/' + tweetNumber + '-' + lognow + '.pop') shutil.move(voteCount, '/var/www/py/tweets/archived/' + logdate + '/' + tweetNumber + '-' + lognow + '.cnt')
def random_line(bot, afile): with open('urls.txt') as afile: lineURL = next(afile) for num, aline in enumerate(afile): if random.randrange(num + 2): continue lineURL = aline return bot.say(lineURL) afile.close()
def give_tokens(bot, trigger): if int(trigger.group(2)) == 0: bot.reply("Are you mugging me off?") if trigger.nick == trigger.group(1): bot.reply("You sf::Muppet") return giverBalance = bot.playerdb.get_nick_value(trigger.nick, "balance") if giverBalance is None: bot.reply("You aren't part of the game :(") return receiverBalance = bot.playerdb.get_nick_value(trigger.group(1), "balance") if receiverBalance is None: bot.say(trigger.group(1) + " is not part of the game :(") return if int(trigger.group(2)) > int(giverBalance): bot.reply("you wish you had that many sf::Tokens") return bot.say(trigger.nick + " has generously given " + trigger.group(1) + " " + trigger.group(2) + " sf::Tokens") bot.playerdb.set_nick_value(trigger.group(1), "balance", receiverBalance + int(trigger.group(2))) bot.playerdb.set_nick_value(trigger.nick, "balance", giverBalance - int(trigger.group(2)))
def call_tweet_vote_manual(bot, trigger): """Manually lists proposed tweets. Only available to a channel operator.""" bot.say('The following tweets are currently being considered for inclusion in our Twitter timeline. Each Tweet must have a majority of the room\'s approval before being posted.') tweetpath = '/var/www/py/tweets/' text = glob.glob(os.path.join(tweetpath, '*.txt')) for file in text: with open(file) as f: rawTweetCnts = [line.rstrip('\n') for line in f] for line in rawTweetCnts[:2]: tweetCnts = line tmp_filename = file.replace("/var/www/py/tweets/", "") filenameish = tmp_filename.replace(".txt", "") bot.say(filenameish + ' : ' + tweetCnts) bot.say('To vote for a tweet, say .voteTweet <#>. To vote against it, do nothing.')
def twitter_info(bot, trigger): """Provides information about the twitter feed as well as the latest tweet.""" with open('/var/www/py/tweets.txt', 'w') as pretwits: pretwits.close() user = '******' statuses = api.GetUserTimeline(screen_name=user) for tweet in reversed(statuses): with open('/var/www/py/tweets.txt', 'w') as twits: twits.write(tweet.text) twits.close() twitsy = open('/var/www/py/tweets.txt', 'r').readlines()[0] bot.say('Official Woodcoin Twitter page is http://twitter.com/realWoodcoin and our most recent tweet is:') bot.say(' ' + twitsy) bot.say('Say .tweetpropose to propose our next tweet and allow other members of the room to vote on it.')
def random_line(bot, afile): with open('urls.txt') as afile: lineURL = next(afile) for num, aline in enumerate(afile): if random.randrange(num + 2): continue lineURL = aline return bot.say(lineURL) afile.close() # @rule('(?u).*(https?://\S+).*') # def log_urls(bot, trigger): # URL = re.findall(url_finder, trigger) # URL2 = str(URL).replace('[', '').replace(']', '').replace('\'', '') # with open('urls.txt', 'a+') as f: # f.write(str(URL2) + '\n') # f.close() # #remove duplicate urls # dupe_finder = open('urls.txt', 'r') # lines = dupe_finder.read().split('\n') # dupe_finder.close() # dupe_killer = open('urls.txt', 'w') # for line in set(lines): # dupe_killer.write(line + '\n') # dupe_killer.close() # # @commands('randomlink') # @rule('$nickname lineURL') # def random_line(bot, afile): # with open('urls.txt', 'r+') as afile: # for line in afile: # if line.strip(): # afile.write(line) # afile.close() # afile = open('urls.txt') # lineURL = next(afile) # for num, aline in enumerate(afile): # if random.randrange(num + 2): continue # lineURL = aline # return bot.say(lineURL)
def corona(bot, trigger): msg = return_message(trigger.group(2)) bot.say(msg)
def coronachart(bot, trigger): bot.say('https://coronachart.z22.web.core.windows.net/')
def ping(bot, trigger): bot.say(trigger.nick + "!")
def zoidberg(bot, trigger): """Quote Zoidberg from Futurama""" bot.say(random.choice(quotes))
def twitter_help(bot, trigger): """"Private messages twattage.py help information to user""" bot.say('Sending you a list of Twitter-related commands, ' + trigger.nick) bot.say('Official Woodcoin Twitter page is http://twitter.com/realWoodcoin', trigger.nick) bot.say('Funkshelper Twitter commands are:', trigger.nick) bot.say('.twitter - provides feed info / latest tweet', trigger.nick) bot.say('.toptweet - provides latest tweet', trigger.nick) bot.say('.tweetpropose, .proposetweet - logs a user proposal of a tweet for voting', trigger.nick) bot.say('.tweetvote <#> - casts vote on chosen tweet to support', trigger.nick)
def spectre(bot, trigger): """sob if spectre or meltdown are mentioned""" bot.say(random.choice(sob))
def sing(bot, trigger): """The Mock Turtle speaks a line from the Lobster Quadrille.""" bot.say(random.choice(quadrille))
def testrule(bot, trigger): bot.say('hi') items.append(1) return "Return Value"
def salute(bot, trigger): """make a #lobsters salute""" lclaw, rclaw = random.sample(claws, 2) r = lclaw + random.choice(faces) + rclaw bot.say(r)