newbot.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import copy
  2. import fastapi
  3. import fastapi.staticfiles as fastapiStaticfiles
  4. import linebot
  5. import linebot.models as linebotModels
  6. #uvicorn main:app --port 443 --ssl-keyfile=/etc/letsencrypt/live/ptt.cx/key.pem --ssl-certfile=/etc/letsencrypt/live/ptt.cx/cert.pem
  7. app = fastapi.FastAPI()
  8. app.mount(
  9. '/static', fastapiStaticfiles.StaticFiles(directory='static'), name='static')
  10. from linebot import (
  11. LineBotApi, WebhookHandler
  12. )
  13. from linebot.exceptions import (
  14. InvalidSignatureError
  15. )
  16. from linebot.models import (
  17. MessageEvent, TextMessage,ImageSendMessage, TextSendMessage,FlexSendMessage, TemplateSendMessage,CarouselTemplate,ConfirmTemplate,PostbackAction,MessageAction,CarouselColumn,URIAction
  18. )
  19. import json
  20. import codecs
  21. line_bot_api = LineBotApi('FvP2AkKj3FSuTjY8Jhwn23DPIb38yDZBliLrDjRA8j+UOQPku+kH2Bz2coDFl4gruRAiLuHuBbtRpILXlN54zJ+bWF5IwU86FClG47VZxCcDcAkhwqCqjYi/Ju7dBzlg963d9CV1KiiBwoiqvV6J7AdB04t89/1O/w1cDnyilFU=')
  22. handler = WebhookHandler('58a73d69c3ad6416e0b465e64c30526a')
  23. #line_bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN')
  24. #handler = WebhookHandler('YOUR_CHANNEL_SECRET')
  25. @app.post('/callback')
  26. async def callback(request: fastapi.Request):
  27. signature = request.headers['X-Line-Signature']
  28. body = await request.body()
  29. bot.handle(body.decode('utf-8'), signature)
  30. return 'OK'
  31. @handler.add(linebotModels.MessageEvent, message=linebotModels.TextMessage)
  32. def message_text(event):
  33. if event.message.text == '叫':
  34. lineBotApi.reply_message(
  35. event.reply_token, linebotModels.AudioSendMessage(
  36. original_content_url=f'{baseUrl}/static/audio/noot_noot.mp3', duration=1000))
  37. #if __name__ == "__main__":
  38. # app.run(host='0.0.0.0', port=443,ssl_context=('/etc/letsencrypt/live/ptt.cx/fullchain.pem', '/etc/letsencrypt/live/ptt.cx/privkey.pem'))
  39. # app.run(host='0.0.0.0', port=14404,ssl_context=('/tmp/cert.pem','/tmp/chain.pem' ))