OSDN Git Service

collection names
[simple-tornado-bot/simple-tornado-bot.git] / bot.py
diff --git a/bot.py b/bot.py
index 80cf8de..8f2fe7b 100644 (file)
--- a/bot.py
+++ b/bot.py
@@ -16,21 +16,15 @@ from linebot.exceptions import InvalidSignatureError
 from linebot.models import TextSendMessage
 
 
-class WebHookHandler(tornado.web.RequestHandler):   
-    def get(self):
-        mes = self.get_argument('code','')
-        self.name = 'glove'
-        self.write(self.main(mes))
-        
-    def main(self,no):
+class WebHookHandler(tornado.web.RequestHandler):        
+    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'仕事中.'
-        #table = self.users(self.name)
-        table = pymongo.MongoClient(uri)[ac]['glove']
+        table, na = self.users()
         item = table.find({'no':re.compile(no,re.IGNORECASE)})
         if item.count() == 1:
             x = item[0]
@@ -49,36 +43,39 @@ class WebHookHandler(tornado.web.RequestHandler):
             ans = self.itr(sorted(list1, key=lambda k:k['no']))
         else:
             ans = self.itr(table.find().sort('no'))
-            ans = '-*-glove list-*-\n'+ans
+            ans = '-*-'+na+' list-*-\n'+ans
         return ans
     
-    def itr(self,item):
+    def itr(self, item):
         ans = ''
         for x in item:
             ans += '【'+x['no']+'】 '
         return ans
     
-    def setting(self,name,dbname):
-        client = pymongo.MongoClient(uri)[ac]
-        if dbname in client.collection_names(include_system_collections=False):
-            db = client['users']
-            item = db.find_one({'name':name})
+    def help(self):
+        s = '-*-database names-*-\n'
+        for x in self.database.collection_names(include_system_collections=True):
+            s += x+'\n'
+        return s
+    
+    def setting(self, dbname):
+        dbname = dbname.lower()
+        if dbname in self.database.collection_names(include_system_collections=False):
+            db = self.database['users']
+            item = db.find_one({'name':self.uid})
             if item['dbname'] == dbname:
                 return False
             else:
-                db.update({'user':name,'dbname':dbname})
+                db.update({'name':self.uid}, {'name':self.uid, 'dbname':dbname})
                 return True
-    
-    def users(self,name):
-        client = pymongo.MongoClient(uri)[ac]
-        db = client['users']
-        item = db.find_one({'name':name})
-        if item:
-            return client[item['dbname']]
-        else:
-            db.insert({'name':name,'dbname':'glove'})
-            return client['glove']
-                
+        return False
+
+    def users(self):
+        db = self.database['users']
+        item = db.find_one({'name':self.uid})
+        x = item['dbname']
+        return self.database[x], x
+                          
     def post(self):
         '''
         signature = self.request.headers['X-Line-Signature']
@@ -92,16 +89,27 @@ class WebHookHandler(tornado.web.RequestHandler):
         '''
         dic = tornado.escape.json_decode(self.request.body)              
         for event in dic['events']:
-            if 'replyToken' in event:
-                x = event['replyToken']
-                y = event['message']['text']
-                if self.setting(x,y):
-                    self.name = y
-                    linebot.reply_message(x,
+            if 'replyToken' in event.keys():
+                self.uid = event['source']['userId']
+                self.database = pymongo.MongoClient(uri)[ac]                
+                if event['type'] == 'unfollow':
+                    self.database['users'].remove({'name':self.uid})
+                    return
+                elif event['type'] == 'join':
+                    db = self.database['users']
+                    if not db.find_one({'name':self.uid}):
+                        db.insert({'name':self.uid, 'dbname':'glove'})
+                    return
+                x = event['message']['text']                
+                if self.setting(x):
+                    linebot.reply_message(event['replyToken'],
                         TextSendMessage(text=u'設定完了.'))
+                elif x == '?':
+                    linebot.reply_message(event['replyToken'],
+                        TextSendMessage(text=self.help())
+                    )
                 else:
-                    self.name = x
-                    linebot.reply_message(x,
+                    linebot.reply_message(event['replyToken'],
                         TextSendMessage(text=self.main(x))
                     )
         
@@ -112,17 +120,18 @@ class DummyHandler(tornado.web.RequestHandler):
             f = open(x)
             data = f.read()
             f.close()
-            self.main(x[2:-4],data)
+            self.main(x[2:-4], data)
     
-    def main(self,name,data):
+    def main(self, name, data):
         if name == 'requirements':
             return
         item = []
+        dic = None
         for x in data.split('\n'):
-            if x[0] == '@':
+            if len(x) > 0 and x[0] == '@':
                 dic = {}
                 dic['name'] = x[1:]
-            else:
+            elif dic:
                 dic['no'] = x
                 item.append(dic)
         table = self.db[name]