OSDN Git Service

update
[simple-tornado-bot/simple-tornado-bot.git] / bot.py
diff --git a/bot.py b/bot.py
index bc15410..15704c1 100644 (file)
--- a/bot.py
+++ b/bot.py
@@ -8,29 +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
 from linebot.exceptions import InvalidSignatureError
 from linebot.models import TextSendMessage
-from linebot.webhook import WebhookHandler
 
 
 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]
@@ -45,39 +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):
+        '''
         signature = self.request.headers['X-Line-Signature']
         body = self.request.body
-        handler = WebhookHandler(ch)
+        parser = WebhookParser(ch)
         try:
-            handler.handle(body, signature)
+            parser.parse(body, signature)
         except InvalidSignatureError:
             tornado.web.HTTPError(404)
-        dict = tornado.escape.json_decode(self.request.body)
-        for event in dict['events']:
+            return
+        '''
+        dic = tornado.escape.json_decode(self.request.body)              
+        for event in dic['events']:
             if 'replyToken' in event:
-                linebot.reply_message(
-                    event['replyToken'],
-                    TextSendMessage(text=self.main(event['message']['text']))
-                )
+                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] == '@':
@@ -86,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)