from __future__ import unicode_literalsimport os
import sys
import redisfrom argparse import ArgumentParserfrom flask import Flask, request, abort
from linebot import(LineBotApi, WebhookParser
)from linebot.exceptions import(InvalidSignatureError
)from linebot.models import(MessageEvent, TextMessage, TextSendMessage, ImageMessage, VideoMessage, FileMessage, StickerMessage, StickerSendMessage, LocationMessage
)from linebot.utils import PY3app = Flask(__name__)# get channel_secret and channel_access_token from your environment variable
channel_secret = os.getenv('LINE_CHANNEL_SECRET',None)
channel_access_token = os.getenv('LINE_CHANNEL_ACCESS_TOKEN',None)# obtain the port that heroku assigned to this app.
heroku_port = os.getenv('PORT',None)if channel_secret isNone:print('Specify LINE_CHANNEL_SECRET as environment variable.')sys.exit(1)if channel_access_token isNone:print('Specify LINE_CHANNEL_ACCESS_TOKEN as environment variable.')sys.exit(1)line_bot_api = LineBotApi(channel_access_token)
parser = WebhookParser(channel_secret)@app.route("/callback", methods=['POST'])defcallback():signature = request.headers['X-Line-Signature']# get request body as textbody = request.get_data(as_text=True)app.logger.info("Request body: "+ body)# parse webhook bodytry:events = parser.parse(body, signature)except InvalidSignatureError:abort(400)# if event is MessageEvent and message is TextMessage, then echo textfor event in events:ifnotisinstance(event, MessageEvent):continueifisinstance(event.message, TextMessage):handle_TextMessage(event)ifisinstance(event.message, ImageMessage):handle_ImageMessage(event)ifisinstance(event.message, LocationMessage):handle_LocationMessage(event)ifisinstance(event.message, VideoMessage):handle_VideoMessage(event)ifisinstance(event.message, FileMessage):handle_FileMessage(event)ifisinstance(event.message, StickerMessage):handle_StickerMessage(event)ifnotisinstance(event, MessageEvent):continueifnotisinstance(event.message, TextMessage):continuereturn'OK'# Handler function for Text Messagedefhandle_TextMessage(event):print(event.message.text)msg ='Do you want to know the latest news about the disease?'line_bot_api.reply_message(event.reply_token,TextSendMessage(msg))# Handler function for Sticker Messagedefhandle_StickerMessage(event):print(event.message.sticker_id)msg ='That is an interesting Sticker.'line_bot_api.reply_message(event.reply_token,TextSendMessage(msg))# Handler function for Image Messagedefhandle_ImageMessage(event):line_bot_api.reply_message(event.reply_token,TextSendMessage(text="This photo has been stored successfully"))# Handler function for Location Messagedefhandle_LocationMessage(event):line_bot_api.reply_message(event.reply_token,TextSendMessage(text="I am sure your community does not have infected person."))# Handler function for Video Messagedefhandle_VideoMessage(event):line_bot_api.reply_message(event.reply_token,TextSendMessage(text="Nice video!"))# Handler function for File Messagedefhandle_FileMessage(event):line_bot_api.reply_message(event.reply_token,TextSendMessage(text="Nice file!"))if __name__ =="__main__":arg_parser = ArgumentParser(usage='Usage: python '+ __file__ +' [--port <port>] [--help]')arg_parser.add_argument('-d','--debug', default=False,help='debug')options = arg_parser.parse_args()app.run(host='0.0.0.0', debug=options.debug, port=heroku_port)