import tornado.ioloop
import tornado.web
import tornado.escape
-import os, hmac, base64, hashlib, re
-import json, pytz, pymongo
+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
-from multiprocessing.connection import answer_challenge
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]
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 = json.load(self.request.headers)
- body = json.load(self.request.body)
- hash = hmac.new(header['X-LINE-SIGNATURE'].encode('utf-8'),
- body.encode('utf-8'), hashlib.sha256).digest()
- signature = base64.b64encode(hash)
+ '''
+ signature = self.request.headers['X-Line-Signature']
+ body = self.request.body
+ parser = WebhookParser(ch)
try:
- events = webhook.parse(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] == '@':
else:
dic['no'] = x
item.append(dic)
+ table = self.db[name]
table.remove()
for x in item:
table.insert(x)
ch = os.environ['Channel_Secret']
uri = os.environ['MONGODB_URI']
ac = os.environ['ACCOUNT']
+ port = int(os.environ.get('PORT',5000))#important in heroku
linebot = LineBotApi(token)
webhook = WebhookParser(ch)
- application.listen(8888)
+ application.listen(port)
tornado.ioloop.IOLoop.instance().start()
\ No newline at end of file