import logging from threading import Event import random import mh_python import time import pyPgSQL.PgSQL from omegle import OmegleChat class MegahalBot(OmegleChat): def __init__(self,disconnect_event,name,host="omegle.com",color=0): self.disconnect_event = disconnect_event self.name=name self.color = color OmegleChat.__init__(self,name=" Megahal",host=host) self.idlecount = 0 def c(self,str,bold=False,color=0): if color == 0: color = self.color if bold: return "\033[1m\033[%sm%s\033[0m\033[0m" %(color, str) else: return "\033[%sm%s\033[0m" %(self.color, str) def respond(self,message,prepend=""): r=mh_python.doreply(message.encode("utf-8")) print self.c("%s [MSG] %s: %s" %(time.strftime("%H:%M:%S"), self.name, r),bold=True) try: self.send(r) #.decode("utf-8")) except Exception,e: print e self.disconnect_event.set() def on_idle(self): self.idlecount += 1 if self.idlecount > 8: self.logger.info("Idle > 8. disconnect()") self.disconnect() self.disconnect_event.set() else: self.logger.info("Idle count %s/8" % self.idlecount) if self.is_confirmed: self.respond("hey?") #restart the conv. def on_message(self,message): self.logger.info("Stranger: %s" % message) print self.c("%s [MSG] %s: %s" %( time.strftime("%H:%M:%S"), "Stranger", message),bold=True,color=32) self.idlecount = 0 time.sleep(0.05) self.logger.info("Megahal simulate typing") # typestr = "%s [EVT] %s: typing" %(time.strftime("%H:%M:%S"),self.name) #print self.c(typestr,bold=True,color=32) try: self.typing() except Exception,e: try: self.disconnect() except: self.disconnect_event.set() return time.sleep(random.randint(2,5)) self.respond(message) #prepend="\033[1A\033[2K\033[%sD"%(len(typestr))) #move up 1; delete line; move left %s def on_connect(self): print self.c("%s [EVT] %s Connection confirmed" % (time.strftime("%H:%M:%S"), self.name)) def on_disconnect(self): print self.c("%s [EVT] %s disconnect" % (time.strftime("%H:%M:%S"), self.name)) self.disconnect_event.set() if __name__ == "__main__": import getopt import sys def usage(): print """%s - megahal ding Argumente: -h, --help Diese Hilfe --host=HOST (Standard: HOST=omegle.com) -d DBNAME or --dbname=DBNAME Database (Standard: DBNAME=omegle) --user=USER --password=PASSWORD -l or --local Do local testing -p NAME or --profile=NAME Database select profile (Standard: NAME=standard) see sourcecode""" % (sys.argv[0]) #parse args try: opts, args = getopt.getopt(sys.argv[1:], "hp:d:l", ["help", "host=", "profile=","dbname=","local","user=","password="]) except getopt.GetoptError,err: print str(err) usage() sys.exit(2) #defaults local = False host = "omegle.com" sql = {"standard": """SELECT message FROM omegle_messages WHERE LENGTH(message) < 50 AND NOT ( message ILIKE '%www.%' OR message ILIKE '%http%' OR message ILIKE '%@%.%') ;""", "all":"""SELECT message FROM omegle_messages WHERE LENGTH(message) > 2 AND LENGTH(message) < 35""", "offensive": """SELECT message FROM omegle_messages WHERE ( message ILIKE '%sex%' OR message ILIKE '%boob%' OR message ILIKE '%horny %' OR message ILIKE '%pussy %' OR message ILIKE '%ass %' OR message ILIKE '%naked%' OR message ILIKE '%fuck%' OR message ILIKE '%pants %' OR message ILIKE '%penis%' OR LENGTH(message) < 7 AND CAST(RANDOM()*10 as integer)=1) AND LENGTH(message) < 35 AND NOT ( message ILIKE '%www.%' OR message ILIKE '%http%' OR message ILIKE '%@%.%');""", "offensive-large": """ SELECT message FROM omegle_messages WHERE from_ident in ( SELECT DISTINCT from_ident FROM omegle_messages WHERE ( message ILIKE '%sex%' OR message ILIKE '%boob%' OR message ILIKE '%horny %' OR message ILIKE '%pussy %' OR message ILIKE '%ass %' OR message ILIKE '%naked%' OR message ILIKE '%fuck%' OR message ILIKE '%pants %' OR message ILIKE '%penis%' OR LENGTH(message) < 7 AND CAST(RANDOM()*10 as integer)=1) AND LENGTH(message) < 35 AND NOT ( message ILIKE '%www.%' OR message ILIKE '%http%' OR message ILIKE '%@%.%') );""", "serious": """SELECT message FROM omegle_messages om1 WHERE ( SELECT COUNT(*) FROM omegle_messages om2 WHERE ( om1.from_ident = om2.from_ident OR om1.to_ident = om2.from_ident) AND (om1.send_time - om2.send_time > interval '-2 hours' AND om1.send_time - om2.send_time < interval '2 hours')) > 25 AND LENGTH(message) < 30 AND NOT ( message ILIKE '%www.%' OR message ILIKE '%http%' OR message ILIKE '%@%.%');""", } sqlKey = "standard" dbname = "omegle" user = "omegle" password = "omegle" for o, a in opts: if o in ('-h', '--help'): usage() sys.exit(0) elif o in ('-d', '--dbname'): dbname = a elif o in ('--user'): user = a elif o in ('--password'): password = a elif o in ('-l', '--local'): local = True elif o == "--host": host = a elif o in ("-p", "--profile"): if sql.has_key(a): sqlKey = a else: print "Profile %s does not exist, create it!" % a sys.exit(0) mh_python.initbrain() conn = pyPgSQL.PgSQL.connect(database=dbname,user=user,password=password,host="10.2.2.13") cur = conn.cursor() print sql[sqlKey] cur.execute(sql[sqlKey]) messages = cur.fetchall() c=0 for message in messages: c+=1 if c%20==0: print "%s%s/%s" % ("\033[2K\033[E",c,len(messages)), #XXX pass massage[0] to mh and end with a fucked up python mh_python.learn("%s " % (message[0])) mh_python.learn("%s " % (message[0])) print "%s%s/%s" % ("\033[2K\033[E",len(messages),len(messages)) cur.close() conn.close() del messages logging.basicConfig(level=logging.DEBUG) if local: print "CTRL-C\n>>> ", while True: x=sys.stdin.readline().strip() print "<<< %s\n>>> " % mh_python.doreply(x), else: print "press ctrl-c to abort" event = Event() bot=MegahalBot(event,"A",host=host,color=31) bot.start() try: while True: event.wait(0.5) if event.isSet(): print "disconnect_event set" break except KeyboardInterrupt: print "CTRL-C pressed, exiting" if bot.is_connected: bot.disconnect()