Exemple #1
0
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)
Exemple #2
0
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)
Exemple #3
0
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
Exemple #4
0
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)
Exemple #5
0
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)
Exemple #6
0
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')
Exemple #7
0
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()
Exemple #8
0
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)))
Exemple #9
0
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.')
Exemple #10
0
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.')
Exemple #11
0
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)
Exemple #12
0
def corona(bot, trigger):
    msg = return_message(trigger.group(2))
    bot.say(msg)
Exemple #13
0
def coronachart(bot, trigger):
    bot.say('https://coronachart.z22.web.core.windows.net/')
Exemple #14
0
 def ping(bot, trigger):
     bot.say(trigger.nick + "!")
Exemple #15
0
def zoidberg(bot, trigger):
    """Quote Zoidberg from Futurama"""
    bot.say(random.choice(quotes))
Exemple #16
0
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)
Exemple #17
0
def spectre(bot, trigger):
    """sob if spectre or meltdown are mentioned"""
    bot.say(random.choice(sob))
Exemple #18
0
def sing(bot, trigger):
    """The Mock Turtle speaks a line from the Lobster Quadrille."""
    bot.say(random.choice(quadrille))
Exemple #19
0
 def testrule(bot, trigger):
     bot.say('hi')
     items.append(1)
     return "Return Value"
Exemple #20
0
def salute(bot, trigger):
    """make a #lobsters salute"""
    lclaw, rclaw = random.sample(claws, 2)
    r = lclaw + random.choice(faces) + rclaw
    bot.say(r)