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
|
from datetime import datetime
import time
import asyncio
import telepot
import telepot.async
import clean
class CleanBot(telepot.async.Bot):
def log(self, msg, date=datetime.now()):
date = date.strftime('%a %b %d %Y %H:%M:%S')
print('[%s] %s' % (date, msg))
def log_to(self, msg, user):
self.log('%s <-- %s' % (user, msg))
def log_from(self, msg, user, date):
self.log('%s --> %s' % (user, msg), date=date)
def send(self, user, msg):
yield from self.sendMessage(user, msg)
self.log_to(msg, user)
def handle_text(self, msg):
date = datetime.fromtimestamp(int(msg['date']))
self.log_from(msg['text'], msg['from']['id'], date)
try:
result = clean.single_command(msg['text'])
if result == None:
raise ValueError()
yield from self.send(msg['from']['id'], result)
except UnicodeEncodeError:
yield from self.send(msg['from']['id'], 'Illegal character')
except clean.CompileException:
yield from self.send(msg['from']['id'], 'Compile error')
except clean.TimeoutException:
yield from self.send(msg['from']['id'], 'Timeout exceeded')
def handle_other(self, msg):
date = datetime.fromtimestamp(int(msg['date']))
self.log_from('unknown content type', msg['from']['username'], date)
@asyncio.coroutine
def handle(self, msg):
content_type, chat_type, chat_id = telepot.glance2(msg)
if content_type == 'text':
yield from self.handle_text(msg)
else:
yield from self.handle_other(msg)
def run(self):
while True:
time.sleep(10)
def main():
bot = CleanBot('177072260:AAESRI146zYqh3iZN0WPboB6Z-LpmKyX3J0')
loop = asyncio.get_event_loop()
loop.create_task(bot.messageLoop())
print('Listening...')
loop.run_forever()
if __name__ == '__main__':
main()
|