key = self.separator.join(words[:-1]) # add the last word to the set self.redis_conn.sadd(self.make_key(key), words[-1]) # if we should say something, generate some messages based on what # was just said and select the longest, then add it to the list if say_something: best_message = '' for i in range(self.messages_to_generate): generated = self.generate_message(seed=key) if len(generated) > len(best_message): best_message = generated if best_message: messages.append(best_message) if len(messages): return random.choice(messages) def command_patterns(self): return (('.*', self.log), ) host = 'irc.snoonet.org' port = 6667 nick = 'thebotandstuff' ignored = ['banjax', 'grisher'] run_bot(MarkovBot, host, port, nick, ['#outsidethehall'])
} def check_lulz(self, sender, message, channel): if channel in self.last_urls and self.message_count > 0: vals = { 'sender': self.last_urls[channel]['sender'], 'phrases': self.phrases, } for pattern, score in self.influencer_patterns: if re.match(pattern % vals, message): self.redis_conn.zincrby(self.last_urls[channel]['url'], score) def log(self, sender, message, channel): if self.message_count > 0: self.message_count -= 1 self.check_lulz(sender, message, channel) self.search_urls(sender, message, channel) def command_patterns(self): return ( ('.*', self.log), ) host = 'irc.freenode.net' port = 6667 nick = 'walrus-whisker' run_bot(LolBot, host, port, nick, ['#lawrence-botwars'])
no_html = re.sub('<[^\>]+>', '', ghetto_parsed) no_charrefs = re.sub('&[^\;]+;', '', no_html) return chap, no_charrefs def display(self, sender, message, channel): if self.is_ping(message): query = self.fix_ping(message) result = self.fetch_result(query) if result: return '%s: %s' % (result[0], result[1]) else: self.last_message = message def contextualize(self, sender, message, channel): result = self.fetch_result(self.last_message) if result: return '%s: %s' % (result[0], result[1]) def command_patterns(self): return ( ('^contextualize', self.contextualize), ('', self.display), ) host = 'irc.freenode.net' port = 6667 nick = 'quote_bot' run_bot(QuoteBot, host, port, nick, ['#botwars'])
self.get_currency("", "", "") self.xpm_mining("", "", "") self.get_beer("", "", "") self.get_qrk_news("", "", "") self.get_btc_news("", "", "") self.get_ltc_news("", "", "") self.get_mtgox("", "", "") class GreeterBot(IRCBot, Commands): def command_patterns(self): return ( ('!s$', self.get_currency), ('!mtgox$', self.get_mtgox), ('!ltcnews$', self.get_ltc_news), ('!btcnews$', self.get_btc_news), ('!qrknews$', self.get_qrk_news), ('!beer$', self.get_beer), ('!votka$', self.get_qrk_balance), ('!xpm_mining', self.xpm_mining), ('!help$', self.help) ) if __name__ == "__main__": try: bt = BasicTest() bt.run_test() run_bot(GreeterBot, 'irc.freenode.net', 6667, 'nermincoin2', ['#btcsohbet', '#speedlings', '#bitcoin-tr', '#eksicoin', '#cointurk']) except Exception, e: import traceback traceback.print_exc()
#!/usr/local/bin/python ''' DEPENDENCES pip install irckit pip install gevent (for botnet) pip install boto (for botnet's EC2 launcher) pip install httplib2 (for some of the bots) ''' from irc import IRCBot, run_bot class GreeterBot(IRCBot): def greet(self, nick, message, channel): return 'Hi, %s' % nick def command_patterns(self): return (self.ping('^hello', self.greet), ) host = 'irc.freenode.net' port = 6667 nick = 'greeterbot' run_bot(GreeterBot, host, port, nick, ['#botwars'])
return "beeeeech slaps %s" % inp def whoami(self, nick, message, channel): return "You are %s silly" % nick def help(self, nick, message, channel): args = message[5:].lower() if len(args) < 1: return "Hai %s I'm %s a bot of course... I do amazingly silly things: Commands(%s) : %s" % (nick, makebold(self.conn.nick), makebold(len(self.cl)), ",".join(sorted(self.cl))) else: return "%s: %s" % (args, makebold(self.getHelpkey(args))) def command_patterns(self): return( self.command("say", self.say, "say", "make the bot say something"), self.command("dice", self.dice, "dice", "make the bot roll a dice"), self.command("slap", self.slap, "slap", "make the bot slap someone"), self.command("help", self.help, "help", "get help on commands"), self.command("whoami", self.whoami, "whoami", "see who you are of course"), ) host = "irc.domain.tld" port = 6667 nick = "bawt" run_bot(bot, host, port, nick, rooms)
return messages def log(self, sender, message, channel): say_something = self.is_ping(message) or (sender != self.conn.nick and random.random() < self.chattiness) if channel not in self.active_channels and sender != 'oromit': say_something = False if message.startswith('/'): return if self.is_ping(message): message = self.fix_ping(message) messages = self.parse_message(message, say_something) if len(messages) and (channel not in self.channel_timers or channel in self.unlimited_channels or time.time() - self.channel_timers[channel] > self.cooldown): self.channel_timers[channel] = time.time() resmsg = random.choice(messages) print("In #%s: <%s> %s" % (channel, sender, message)) print("-> %s" % resmsg) return resmsg def command_patterns(self): return (('.*', self.log),) if __name__ == "__main__": run_bot(MarkovBot, 'irc.chat.twitch.tv', 6667, distdata.nick, distdata.join_channels, distdata.password)
'url': url, } def check_lulz(self, sender, message, channel): if channel in self.last_urls and self.message_count > 0: vals = { 'sender': self.last_urls[channel]['sender'], 'phrases': self.phrases, } for pattern, score in self.influencer_patterns: if re.match(pattern % vals, message): self.redis_conn.zincrby(self.last_urls[channel]['url'], score) def log(self, sender, message, channel): if self.message_count > 0: self.message_count -= 1 self.check_lulz(sender, message, channel) self.search_urls(sender, message, channel) def command_patterns(self): return (('.*', self.log), ) host = 'irc.freenode.net' port = 6667 nick = 'walrus-whisker' run_bot(LolBot, host, port, nick, ['#lawrence-botwars'])
import urllib from irc import IRCBot, run_bot class GoogleBot(IRCBot): def fetch_result(self, query): sock = httplib2.Http(timeout=1) headers, response = sock.request( 'http://ajax.googleapis.com/ajax/services/search/web?v=2.0&q=%s' % \ urllib.quote(query) ) if headers['status'] in (200, '200'): response = json.loads(response) return response['responseData']['results'][0]['unescapedUrl'] def find_me(self, nick, message, channel, query): result = self.fetch_result(query) if result: return result def command_patterns(self): return (self.ping('^find me (?P<query>\S+)', self.find_me), ) host = 'irc.freenode.net' port = 6667 nick = 'googlebot1337' run_bot(GoogleBot, host, port, nick, ['#botwars'])
if headers['status'] in (200, '200'): return json.loads(response) def fetch_answer(self, query): question_search = self.get_json( 'http://answers.yahooapis.com/AnswersService/V1/questionSearch?appid=YahooDemo&query=%s&output=json' % \ urllib.quote(query) ) if len(question_search['all']['questions']): question_id = question_search['all']['questions'][0]['Id'] answer_data = self.get_json( 'http://answers.yahooapis.com/AnswersService/V1/getQuestion?appid=YahooDemo&question_id=%s&output=json' % \ urllib.quote(question_id) ) chosen = answer_data['all']['question'][0]['ChosenAnswer'] return chosen.encode('utf-8', 'replace') def answer(self, sender, message, channel): result = self.fetch_answer(message) if result: return re.sub('[\r\n ]+', ' ', result).strip() def command_patterns(self): return (self.ping('^\S+', self.answer), ) host = 'irc.freenode.net' port = 6667 nick = 'answer_bot' run_bot(YahooAnswersBot, host, port, nick, ['#botwars'])
# split up the incoming message into chunks that are 1 word longer than # the size of the chain, e.g. ['what', 'up', 'bro'], ['up', 'bro', '\x02'] for words in itertools.permutations(self.sanitize_message(message).split(),g_chain_length): # grab everything but the last word key = self.separator.join(words) # if we should say something, generate some messages based on what # was just said and select the longest, then add it to the list if say_something: best_message = '' for i in range(self.messages_to_generate): generated = self.generate_message(seed=key) if len(generated) > len(best_message): best_message = generated # throw out messages 2 words or shorter if best_message and len(best_message.split()) > g_chain_length: messages.append(best_message) if len(messages): rand_index = random.randrange(len(messages)) return messages[rand_index] def command_patterns(self): return ( ('.*', self.log), ) run_bot(MarkovBot, host, port, nick, chans)
self.pubsub.subscribe('out') for msg in self.pubsub.listen(): message = json.loads(msg['data']) print "Got %s" % message if message['version'] == 1: if message['type'] == 'privmsg': self.respond(message['data']['message'], channel=message['data']['to']) def do_pub(self, nick, message, channel): to_publish = json.dumps({ 'version': 1, 'type': 'privmsg', 'data': { 'sender': nick, 'channel': channel, 'message': message, }, }) r.publish('in', to_publish) print "Sending to in %s" % to_publish def command_patterns(self): return (('.*', self.do_pub), ) run_bot(RelayBot, config['servers'][0]['hostname'], config['servers'][0]['port'], config['servers'][0]['nick'], config['servers'][0]['channels'])
result = random.choice(results) result = re.sub('<[^<]+?>', '', result) return smart_str(result) def handle_all(self, nick, message, channel): if 'twitter' in message: tweet = get_tweet(message) if tweet: return tweet if 'youtube' in message: pass def command_patterns(self): return (('selam|merhaba|hi|hello', self.greet), ('!pyzen', self.pyzen), ('!cs$', self.cs), ('!hamachi', self.hamachi), ('!cs_macfag', self.cs_macfag), ('!500t', self.random_log), ('!cs_sunucu', self.sunucu), self.ping('.*', self.talk), ('.*', self.handle_all)) host = 'irc.freenode.net' port = 6667 nick = 'esrahanim' run_bot(LogarBot, host, port, nick, [ '#brotoss', '#pyistanbul', ])
# grab everything but the last word key = self.separator.join(words[:-1]) # add the last word to the set self.redis_conn.sadd(self.make_key(key), words[-1]) # if we should say something, generate some messages based on what # was just said and select the longest, then add it to the list if say_something: best_message = "" for i in range(self.messages_to_generate): generated = self.generate_message(seed=key) if len(generated) > len(best_message): best_message = generated if best_message: messages.append(best_message) if len(messages): return random.choice(messages) def command_patterns(self): return ((".*", self.log),) host = "irc.freenode.net" port = 6667 nick = "whatyousay" run_bot(MarkovBot, host, port, nick, ["#lawrence-botwars"])
#!/usr/local/bin/python ''' DEPENDENCES pip install irckit pip install gevent (for botnet) pip install boto (for botnet's EC2 launcher) pip install httplib2 (for some of the bots) ''' from irc import IRCBot, run_bot class GreeterBot(IRCBot): def greet(self, nick, message, channel): return 'Hi, %s' % nick def command_patterns(self): return ( self.ping('^hello', self.greet), ) host = 'irc.freenode.net' port = 6667 nick = 'greeterbot' run_bot(GreeterBot, host, port, nick, ['#botwars'])
# grab everything but the last word key = self.separator.join(words[:-1]) # add the last word to the set self.redis_conn.sadd(self.make_key(key), words[-1]) # if we should say something, generate some messages based on what # was just said and select the longest, then add it to the list if say_something: best_message = '' for i in range(self.messages_to_generate): generated = self.generate_message(seed=key) if len(generated) > len(best_message): best_message = generated if best_message: messages.append(best_message) if len(messages): return random.choice(messages) def command_patterns(self): return (('.*', self.log), ) host = 'irc.freenode.net' port = 6667 nick = 'whatyousay' run_bot(MarkovBot, host, port, nick, ['#lawrence-botwars'])
from irc import IRCBot, run_bot class GoogleBot(IRCBot): def fetch_result(self, query): sock = httplib2.Http(timeout=1) headers, response = sock.request( 'http://ajax.googleapis.com/ajax/services/search/web?v=2.0&q=%s' % \ urllib.quote(query) ) if headers['status'] in (200, '200'): response = json.loads(response) return response['responseData']['results'][0]['unescapedUrl'] def find_me(self, nick, message, channel, query): result = self.fetch_result(query) if result: return result def command_patterns(self): return ( self.ping('^find me (?P<query>\S+)', self.find_me), ) host = 'irc.freenode.net' port = 6667 nick = 'googlebot1337' run_bot(GoogleBot, host, port, nick, ['#botwars'])
img = random.randint(0, len(guesses) - 1) if self.is_quality(guesses[img]): return guesses[img] else: guesses = guesses[:img] + guesses[img + 1:] def is_quality(self, img): non_empty_lines = 0 for line in img.splitlines(): if line.strip(): non_empty_lines += 1 return non_empty_lines > 3 def display(self, nick, message, channel): result = self.fetch_result(message) if result: for line in result.splitlines()[:45]: self.respond(line, channel=channel) time.sleep(.2) def command_patterns(self): return (self.ping('^\S+', self.display), ) host = 'irc.freenode.net' port = 6667 nick = 'picasso_bot' run_bot(AsciiArtBot, host, port, nick, ['#botwars'])
# add the last word to the set self.redis_conn.sadd(self.make_key(key), words[-1]) # if we should say something, generate some messages based on what # was just said and select the longest, then add it to the list if say_something: best_message = '' for i in range(self.messages_to_generate): generated = self.generate_message(seed=key) if len(generated) > len(best_message): best_message = generated if best_message: messages.append(best_message) if len(messages): return random.choice(messages) def command_patterns(self): return ( ('.*', self.log), ) host = 'irc.hypersigil.org' port = 6667 nick = 'cake' run_bot(MarkovBot, host, port, nick, ['#botdev'])
result = random.choice(results) result = re.sub('<[^<]+?>', '', result) return smart_str(result) def handle_all(self, nick, message, channel): if 'twitter' in message: return 'twitter buldum' if 'youtube' in message: return 'youtube buldum' def command_patterns(self): return ( ('selam|merhaba|hi|hello', self.greet), ('!pyzen', self.pyzen), ('!cs$', self.cs), ('!hamachi', self.hamachi), ('!cs_macfag', self.cs_macfag), ('!500t', self.random_log), ('!cs_sunucu', self.sunucu), self.ping('.*', self.talk), ('.*', self.handle_all) ) host = 'irc.freenode.net' port = 6667 nick = 'esra' run_bot(LogarBot, host, port, nick, ['#brotoss', '#pyistanbul', ])
# add the last word to the set self.redis_conn.sadd(self.make_key(key), words[-1]) # if we should say something, generate some messages based on what # was just said and select the longest, then add it to the list if say_something: best_message = '' for i in range(self.messages_to_generate): generated = self.generate_message(seed=key) if len(generated) > len(best_message): best_message = generated if best_message: messages.append(best_message) if len(messages): return random.choice(messages) def command_patterns(self): return ( ('.*', self.log), ) host = 'irc.snoonet.org' port = 6667 nick = 'thebotandstuff' ignored = ['banjax', 'grisher'] run_bot(MarkovBot, host, port, nick, ['#outsidethehall'])
if msg['type'] != 'message': continue log.debug('Received {0}'.format(msg)) for channel in config.IRC_CHANNELS: self.respond(msg['data'], channel=channel) def do_privmsg(self, nick, message, channel): pass def do_part(self, nick, command, channel): pass def do_quit(self, command, nick, channel): pass def do_nick(self, old_nick, command, new_nick): pass def command_patterns(self): return ( ('/privmsg', self.do_privmsg), ('/part', self.do_part), ('/quit', self.do_quit), ('/nick', self.do_nick), ) if __name__ == '__main__': run_bot(RelayBot, config.IRC_HOST, config.IRC_PORT, config.IRC_NICK, config.IRC_CHANNELS)
def whoami(self, nick, message, channel): return "You are %s silly" % nick def help(self, nick, message, channel): args = message[5:].lower() if len(args) < 1: return "Hai %s I'm %s a bot of course... I do amazingly silly things: Commands(%s) : %s" % ( nick, makebold(self.conn.nick), makebold(len( self.cl)), ",".join(sorted(self.cl))) else: return "%s: %s" % (args, makebold(self.getHelpkey(args))) def command_patterns(self): return ( self.command("say", self.say, "say", "make the bot say something"), self.command("dice", self.dice, "dice", "make the bot roll a dice"), self.command("slap", self.slap, "slap", "make the bot slap someone"), self.command("help", self.help, "help", "get help on commands"), self.command("whoami", self.whoami, "whoami", "see who you are of course"), ) host = "irc.domain.tld" port = 6667 nick = "bawt" run_bot(bot, host, port, nick, rooms)
return guesses[img] else: guesses = guesses[:img] + guesses[img + 1:] def is_quality(self, img): non_empty_lines = 0 for line in img.splitlines(): if line.strip(): non_empty_lines += 1 return non_empty_lines > 3 def display(self, nick, message, channel): result = self.fetch_result(message) if result: for line in result.splitlines()[:45]: self.respond(line, channel=channel) time.sleep(.2) def command_patterns(self): return ( self.ping('^\S+', self.display), ) host = 'irc.freenode.net' port = 6667 nick = 'picasso_bot' run_bot(AsciiArtBot, host, port, nick, ['#botwars'])
def fetch_answer(self, query): question_search = self.get_json( 'http://answers.yahooapis.com/AnswersService/V1/questionSearch?appid=YahooDemo&query=%s&output=json' % \ urllib.quote(query) ) if len(question_search['all']['questions']): question_id = question_search['all']['questions'][0]['Id'] answer_data = self.get_json( 'http://answers.yahooapis.com/AnswersService/V1/getQuestion?appid=YahooDemo&question_id=%s&output=json' % \ urllib.quote(question_id) ) chosen = answer_data['all']['question'][0]['ChosenAnswer'] return chosen.encode('utf-8', 'replace') def answer(self, sender, message, channel): result = self.fetch_answer(message) if result: return re.sub('[\r\n ]+', ' ', result).strip() def command_patterns(self): return ( self.ping('^\S+', self.answer), ) host = 'irc.freenode.net' port = 6667 nick = 'answer_bot' run_bot(YahooAnswersBot, host, port, nick, ['#botwars'])
def do_sub(self): log = logging.getLogger() sub = get_redis_client() self.pubsub = sub.pubsub() self.pubsub.subscribe(config.REDIS_PUBSUB_CHANNEL) for msg in self.pubsub.listen(): if msg['type'] != 'message': continue log.debug('Received {0}'.format(msg)) for channel in config.IRC_CHANNELS: self.respond(msg['data'], channel=channel) def do_privmsg(self, nick, message, channel): pass def do_part(self, nick, command, channel): pass def do_quit(self, command, nick, channel): pass def do_nick(self, old_nick, command, new_nick): pass def command_patterns(self): return ( ('/privmsg', self.do_privmsg), ('/part', self.do_part), ('/quit', self.do_quit), ('/nick', self.do_nick), ) if __name__=='__main__': run_bot(RelayBot, config.IRC_HOST, config.IRC_PORT, config.IRC_NICK, config.IRC_CHANNELS)
print 'Sending to in %s' % to_publish def do_quit(self, command, nick, channel): to_publish = json.dumps({ 'version': 1, 'type': 'quit', 'data': { 'sender': nick, } }) pub.publish('in', to_publish) print 'Sending to in %s' % to_publish def do_nick(self, old_nick, command, new_nick): if pub.get('zenircbot:nick') == old_nick: pub.set('zenircbot:nick', new_nick) print 'nick change: %s -> %s' % (old_nick, new_nick) def command_patterns(self): return ( ('/privmsg', self.do_privmsg), ('/part', self.do_part), ('/quit', self.do_quit), ('/nick', self.do_nick), ) run_bot(RelayBot, config['servers'][0]['hostname'], config['servers'][0]['port'], config['servers'][0]['nick'], config['servers'][0]['channels'])
'address': address, 'timestamp': time() } finds.append(find) return '[%s] %s needs help at %s', len(finds), nick, address def accept(self, nick, message, channel, find_id): for find in finds: if find['id'] == find_id: finds.remove(find) return '%s accepted request %s', nick, find['id'] return 'find_id not valid' def list(self, nick, message, channel): return finds def command_patterns(self): return ( self.ping('^register (?P<address>\S+)', self.register), self.ping('^find (?P<address>\S+)', self.find), self.ping('^accept (?P<find_id>\S+)', self.accept), self.ping('^list', self.list), ) host = 'irc.freenode.net' port = 6667 nick = 'helper' run_bot(HelperBot, host, port, nick, ['#findhelper'])