summaryrefslogtreecommitdiff
path: root/bot.py
blob: c80d06e6b0e58b6824ae75996974a6c2569d65f2 (plain) (blame)
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()