1 # -*- coding: utf-8 -*-
3 Created on Sat Sep 1 11:18:39 2018
13 from datetime import datetime
14 from linebot import LineBotApi, WebhookParser
15 from linebot.exceptions import InvalidSignatureError
16 from linebot.models import TextSendMessage
19 class WebHookHandler(tornado.web.RequestHandler):
21 mes = self.get_argument('code', '')
23 self.write(self.main(mes))
26 pz = pytz.timezone('Asia/Tokyo')
27 now = datetime.now(pz)
30 if (w < 5)and(t >= 9)and(t < 16):
32 table, na = self.users
33 item = table.find({'no':re.compile(no,re.IGNORECASE)})
36 ans = x['name']+'\n'+x['no']
37 elif item.count() > 1:
40 list1 = sorted(obj, key=lambda k:k['name'])
42 if x['name'] == list1[0]['name']:
43 ans += x['name']+'\n'+x['no']+'\n'
48 ans = self.itr(sorted(list1, key=lambda k:k['no']))
50 ans = self.itr(table.find().sort('no'))
51 ans = '-*-'+na+' list-*-\n'+ans
57 ans += '【'+x['no']+'】 '
60 def setting(self, dbname):
61 client = pymongo.MongoClient(uri)[ac]
62 if dbname in client.collection_names(include_system_collections=False):
64 item = db.find_one({'name':self.uid})
66 db.insert({'user':self.id, 'dbname':dbname})
67 elif item['dbname'] == dbname:
70 db.update({'user':self.uid, 'dbname':dbname})
74 client = pymongo.MongoClient(uri)[ac]
76 item = db.find_one({'name':self.uid})
81 db.insert({'name':self.uid, 'dbname':'glove'})
82 return client['glove'], 'glove'
86 signature = self.request.headers['X-Line-Signature']
87 body = self.request.body
88 parser = WebhookParser(ch)
90 parser.parse(body, signature)
91 except InvalidSignatureError:
92 tornado.web.HTTPError(404)
95 dic = tornado.escape.json_decode(self.request.body)
96 for event in dic['events']:
97 if 'replyToken' in event:
98 x = event['message']['text']
99 self.uid = event['source']['userId']
101 linebot.reply_message(event['replyToken'],
102 TextSendMessage(text=u'設定完了.'))
104 linebot.reply_message(event['replyToken'],
105 TextSendMessage(text=self.main(x))
108 class DummyHandler(tornado.web.RequestHandler):
110 self.db = pymongo.MongoClient(uri)[ac]
111 for x in glob.glob('./*.txt'):
115 self.main(x[2:-4], data)
117 def main(self, name, data):
118 if name == 'requirements':
121 for x in data.split('\n'):
128 table = self.db[name]
133 application = tornado.web.Application([(r'/callback',WebHookHandler),(r'/init',DummyHandler)])
135 if __name__ == '__main__':
136 token = os.environ['Access_Token']
137 ch = os.environ['Channel_Secret']
138 uri = os.environ['MONGODB_URI']
139 ac = os.environ['ACCOUNT']
140 port = int(os.environ.get('PORT',5000))#important in heroku
141 linebot = LineBotApi(token)
142 webhook = WebhookParser(ch)
143 application.listen(port)
144 tornado.ioloop.IOLoop.instance().start()