summaryrefslogtreecommitdiff
path: root/pyaiml_bot.py
blob: e91648427e4215b4ff3dc426fe825f41d1438f3c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import logging
from threading import Event
import random

import time
from omegle import OmegleChat

import aiml
k=aiml.Kernel()
k.bootstrap(learnFiles="aiml_files/std-startup.xml", commands="load aiml b")
#k.bootstrap(learnFiles="aiml_files/German-standalone.aiml")

class PyAIMLBot(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="  PyAIML",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=k.respond(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("Bot 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
	host = "omegle.com"
	local=False

	logging.basicConfig(level=logging.DEBUG)
	if local:
		print "CTRL-C\n>>> ",
		while True:
			x=sys.stdin.readline().strip()
			print "<<< %s\n>>> " % k.respond(x),
	else:
		print "press ctrl-c to abort"
		event = Event()
		bot=PyAIMLBot(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()