X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=bot.py;h=15704c1e4b75cfba3be852f20bff4b621a24cdd3;hb=f696c5955d306e8f10b7b166bf40eda92a3e001f;hp=e97c029db2dade314bbd0d7a5095029cf0456c2b;hpb=e0527e0d8645442fcc985a7836545c25865cc325;p=simple-tornado-bot%2Fsimple-tornado-bot.git diff --git a/bot.py b/bot.py index e97c029..15704c1 100644 --- a/bot.py +++ b/bot.py @@ -8,28 +8,28 @@ Created on Sat Sep 1 11:18:39 2018 import tornado.ioloop import tornado.web import tornado.escape -import os, hmac, base64, hashlib, re +import os, re, glob import pytz, pymongo from datetime import datetime -from linebot import LineBotApi, WebhookParser, WebhookHandler +from linebot import LineBotApi, WebhookParser from linebot.exceptions import InvalidSignatureError from linebot.models import TextSendMessage class WebHookHandler(tornado.web.RequestHandler): def get(self): - mes = self.get_argument('code','') + mes = self.get_argument('code', '') + self.uid = '' self.write(self.main(mes)) - def main(self,no): + def main(self, no): pz = pytz.timezone('Asia/Tokyo') now = datetime.now(pz) t = now.hour w = now.weekday() if (w < 5)and(t >= 9)and(t < 16): return u'仕事中.' - db = pymongo.MongoClient(uri)[ac] - table = db['glove'] + table, na = self.users item = table.find({'no':re.compile(no,re.IGNORECASE)}) if item.count() == 1: x = item[0] @@ -44,43 +44,79 @@ class WebHookHandler(tornado.web.RequestHandler): else: break else: - return ans - ans = '' - for x in sorted(list1, key=lambda k:k['no']): - ans += x['no']+'\n' + return ans + ans = self.itr(sorted(list1, key=lambda k:k['no'])) else: - ans = '' - for x in table.find().sort('no'): - ans += x['no']+'\n' + ans = self.itr(table.find().sort('no')) + ans = '-*-'+na+' list-*-\n'+ans return ans - + + def itr(self, item): + ans = '' + for x in item: + ans += '【'+x['no']+'】 ' + return ans + + def setting(self, dbname): + client = pymongo.MongoClient(uri)[ac] + if dbname in client.collection_names(include_system_collections=False): + db = client['users'] + item = db.find_one({'name':self.uid}) + if not item: + db.insert({'user':self.id, 'dbname':dbname}) + elif item['dbname'] == dbname: + return False + else: + db.update({'user':self.uid, 'dbname':dbname}) + return True + + def users(self): + client = pymongo.MongoClient(uri)[ac] + db = client['users'] + item = db.find_one({'name':self.uid}) + if item: + x = item['dbname'] + return client[x], x + else: + db.insert({'name':self.uid, 'dbname':'glove'}) + return client['glove'], 'glove' + def post(self): - header = self.request.headers - if header.get('Content-Type','') == 'application/json': - body = tornado.escape.json_decode(self.request.body) - hashid = hmac.new(header.get('X-Line-Signature').encode('utf-8'), - body.encode('utf-8'), hashlib.sha256).digest() - signature = base64.b64encode(hashid) - handle = WebhookHandler(ch) + ''' + signature = self.request.headers['X-Line-Signature'] + body = self.request.body + parser = WebhookParser(ch) try: - events = handle.handle(body, signature) + parser.parse(body, signature) except InvalidSignatureError: - raise tornado.web.HTTPError(400) + tornado.web.HTTPError(404) return - for event in events: - if (event['type'] == 'text')and(event['message']['type'] == 'text'): - linebot.reply_message( - event.reply_token, - TextSendMessage(text=self.main(event.Message.text)) - ) + ''' + dic = tornado.escape.json_decode(self.request.body) + for event in dic['events']: + if 'replyToken' in event: + x = event['message']['text'] + self.uid = event['source']['userId'] + if self.setting(x): + linebot.reply_message(event['replyToken'], + TextSendMessage(text=u'設定完了.')) + else: + linebot.reply_message(event['replyToken'], + TextSendMessage(text=self.main(x)) + ) class DummyHandler(tornado.web.RequestHandler): - def get(self): - f = open('data.txt') - data = f.read() - f.close() - db = pymongo.MongoClient(uri)[ac] - table = db['glove'] + def get(self): + self.db = pymongo.MongoClient(uri)[ac] + for x in glob.glob('./*.txt'): + f = open(x) + data = f.read() + f.close() + self.main(x[2:-4], data) + + def main(self, name, data): + if name == 'requirements': + return item = [] for x in data.split('\n'): if x[0] == '@': @@ -89,6 +125,7 @@ class DummyHandler(tornado.web.RequestHandler): else: dic['no'] = x item.append(dic) + table = self.db[name] table.remove() for x in item: table.insert(x)