OSDN Git Service

list スッキリ
[simple-tornado-bot/simple-tornado-bot.git] / bot.py
1 # -*- coding: utf-8 -*-
2 """
3 Created on Sat Sep  1 11:18:39 2018
4
5 @author: fuke masasi
6 """
7
8 import tornado.ioloop
9 import tornado.web
10 import tornado.escape
11 import os, re
12 import pytz, pymongo
13 from datetime import datetime
14 from linebot import LineBotApi, WebhookParser
15 from linebot.exceptions import InvalidSignatureError
16 from linebot.models import TextSendMessage
17
18
19 class WebHookHandler(tornado.web.RequestHandler):   
20     def get(self):
21         mes = self.get_argument('code','')
22         self.write(self.main(mes))
23         
24     def main(self,no):
25         pz = pytz.timezone('Asia/Tokyo')
26         now = datetime.now(pz)
27         t = now.hour
28         w = now.weekday()
29         if (w < 5)and(t >= 9)and(t < 16):
30             return u'仕事中.'
31         db = pymongo.MongoClient(uri)[ac]
32         table = db['glove']
33         item = table.find({'no':re.compile(no,re.IGNORECASE)})
34         if item.count() == 1:
35             x = item[0]
36             ans = x['name']+'\n'+x['no']
37         elif item.count() > 1:
38             ans = ''    
39             obj = list(item)
40             list1 = sorted(obj, key=lambda k:k['name'])
41             for x in list1:
42                 if x['name'] == list1[0]['name']:
43                     ans += x['name']+'\n'+x['no']+'\n'
44                 else:
45                     break
46             else:
47                 return ans         
48             ans = ''             
49             i = 0
50             for x in sorted(list1, key=lambda k:k['no']):
51                 ans += x['no']
52                 if i == 2:
53                     ans += '/n'
54                     i = 0
55                 i += 1
56         else:
57             ans = ''
58             for x in table.find().sort('no'):
59                 ans += x['no']+'\n'
60         return ans
61             
62     def post(self):
63         '''
64         signature = self.request.headers['X-Line-Signature']
65         body = self.request.body
66         parser = WebhookParser(ch)
67         try:
68             parser.parse(body, signature)
69         except InvalidSignatureError:
70             tornado.web.HTTPError(404)
71             return
72         '''
73         dic = tornado.escape.json_decode(self.request.body)              
74         for event in dic['events']:
75             if 'replyToken' in event:
76                 linebot.reply_message(
77                     event['replyToken'],
78                     TextSendMessage(text=self.main(event['message']['text']))
79                 )
80         
81 class DummyHandler(tornado.web.RequestHandler):
82     def get(self):
83         f = open('data.txt')
84         data = f.read()
85         f.close()
86         db = pymongo.MongoClient(uri)[ac]
87         table = db['glove']
88         item = []
89         for x in data.split('\n'):
90             if x[0] == '@':
91                 dic = {}
92                 dic['name'] = x[1:]
93             else:
94                 dic['no'] = x
95                 item.append(dic)
96         table.remove()
97         for x in item:
98             table.insert(x)
99
100 application = tornado.web.Application([(r'/callback',WebHookHandler),(r'/init',DummyHandler)])
101
102 if __name__ == '__main__':
103     token = os.environ['Access_Token']
104     ch = os.environ['Channel_Secret']
105     uri = os.environ['MONGODB_URI']
106     ac = os.environ['ACCOUNT']
107     port = int(os.environ.get('PORT',5000))#important in heroku
108     linebot = LineBotApi(token)
109     webhook = WebhookParser(ch)  
110     application.listen(port)
111     tornado.ioloop.IOLoop.instance().start()
112