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 pz = pytz.timezone('Asia/Tokyo')
22 now = datetime.now(pz)
25 if (w < 5)and(t >= 9)and(t < 16):
27 table, na = self.users()
28 item = table.find({'no':re.compile(no,re.IGNORECASE)})
31 ans = x['name']+'\n'+x['no']
32 elif item.count() > 1:
35 list1 = sorted(obj, key=lambda k:k['name'])
37 if x['name'] == list1[0]['name']:
38 ans += x['name']+'\n'+x['no']+'\n'
43 ans = self.itr(sorted(list1, key=lambda k:k['no']))
45 ans = self.itr(table.find().sort('no'))
46 ans = '-*-'+na+' list-*-\n'+ans
52 ans += '【'+x['no']+'】 '
56 s = '-*-database names-*-\n'
57 out = ['objectlabs-system','objectlabs-system.admin.collections','users']
58 for x in self.database.collection_names(include_system_collections=False):
63 def setting(self, dbname):
64 dbname = dbname.lower()
65 if dbname in self.database.collection_names(include_system_collections=False):
66 db = self.database['users']
67 item = db.find_one({'name':self.uid})
68 if item['dbname'] == dbname:
71 db.update({'name':self.uid}, {'name':self.uid, 'dbname':dbname})
76 db = self.database['users']
77 item = db.find_one({'name':self.uid})
79 return self.database[x], x
83 signature = self.request.headers['X-Line-Signature']
84 body = self.request.body
85 parser = WebhookParser(ch)
87 parser.parse(body, signature)
88 except InvalidSignatureError:
89 tornado.web.HTTPError(404)
92 dic = tornado.escape.json_decode(self.request.body)
93 for event in dic['events']:
94 if 'replyToken' in event.keys():
95 self.uid = event['source']['userId']
96 self.database = pymongo.MongoClient(uri)[ac]
97 if event['type'] == 'unfollow':
98 self.database['users'].remove({'name':self.uid})
100 elif event['type'] == 'join':
101 db = self.database['users']
102 if not db.find_one({'name':self.uid}):
103 db.insert({'name':self.uid, 'dbname':'glove'})
105 x = event['message']['text']
107 linebot.reply_message(event['replyToken'],
108 TextSendMessage(text=u'設定完了.'))
110 linebot.reply_message(event['replyToken'],
111 TextSendMessage(text=self.help())
114 linebot.reply_message(event['replyToken'],
115 TextSendMessage(text=self.main(x))
118 class DummyHandler(tornado.web.RequestHandler):
120 self.db = pymongo.MongoClient(uri)[ac]
121 for x in glob.glob('./*.txt'):
125 self.main(x[2:-4], data)
127 def main(self, name, data):
128 if name == 'requirements':
132 for x in data.split('\n'):
133 if len(x) > 0 and x[0] == '@':
139 table = self.db[name]
144 application = tornado.web.Application([(r'/callback',WebHookHandler),(r'/init',DummyHandler)])
146 if __name__ == '__main__':
147 token = os.environ['Access_Token']
148 ch = os.environ['Channel_Secret']
149 uri = os.environ['MONGODB_URI']
150 ac = os.environ['ACCOUNT']
151 port = int(os.environ.get('PORT',5000))#important in heroku
152 linebot = LineBotApi(token)
153 webhook = WebhookParser(ch)
154 application.listen(port)
155 tornado.ioloop.IOLoop.instance().start()