用于构建自己的电报机器人的异步框架
aio-telegram-bot的Python项目详细描述
AIO电报机器人
用于在API上构建自己的电报机器人的异步框架。
安装
aio-telegram-bot
需要python 3.5.3+并且在pypi上可用:
$ pip install aio-telegram-bot
*兼容pypy3.5-6.0.0+
示例
轮询示例
importasyncioimportosfromaiotelegrambotimportBot,Client,Content,Messagefromaiotelegrambot.rulesimportContainsasyncdefhi(message:Message):awaitmessage.send_message("Hello!",True)asyncdefrun(bot:Bot):awaitbot.initialize()whileTrue:awaitasyncio.sleep(1)if__name__=="__main__":loop=asyncio.get_event_loop()client=Client(os.environ["TELEGRAM_BOT_TOKEN"])bot=Bot(client)bot.add_handler(hi,content_type=Content.TEXT,rule=Contains("hi"))try:loop.run_until_complete(run(bot))exceptKeyboardInterrupt:loop.run_until_complete(bot.close())loop.run_until_complete(bot.client.close())finally:loop.close()
跑步:
$ export TELEGRAM_BOT_TOKEN=12345678:replace-me-with-real-token
$ python3 polling.py
webhook示例
如何生成SSL证书的示例:
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout domain_srv.key -out domain_srv.crt
importargparseimportjsonimportosimportsslfromaiohttpimportwebfromasync_generatorimportasync_generator,yield_fromaiotelegrambotimportBot,Client,Content,Handlers,Messagefromaiotelegrambot.rulesimportContainshandlers=Handlers()TOKEN=os.environ["TELEGRAM_BOT_TOKEN"]HOST=os.environ["TELEGRAM_BOT_HOST"]PORT=8443parser=argparse.ArgumentParser()parser.add_argument("files",metavar="N",type=str,nargs="+")SSL_PUBLIC_KEY,SSL_PRIVATE_KEY=parser.parse_args().files@handlers.add(content_type=Content.TEXT,rule=Contains("hi"))asyncdefhi(message:Message):awaitmessage.send_message("Hello!")asyncdefwebhook_handle(request):bot=request.app["bot"]data=awaitrequest.text()awaitbot.process_update(json.loads(data))returnweb.Response()@async_generatorasyncdefinit_bot(app:web.Application):bot=Bot(Client(TOKEN),handlers)awaitbot.initialize(webhook=True)awaitbot.client.set_webhook("https://{}:{}/{}".format(HOST,PORT,TOKEN),certificate=SSL_PUBLIC_KEY)app["bot"]=botawaityield_()awaitbot.client.delete_webhook()awaitbot.close()awaitbot.client.close()app=web.Application()app.router.add_post("/{}".format(TOKEN),webhook_handle)app.cleanup_ctx.extend([init_bot])context=ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)context.load_cert_chain(SSL_PUBLIC_KEY,SSL_PRIVATE_KEY)web.run_app(app,host="0.0.0.0",port=PORT,ssl_context=context)
跑步:
$ export TELEGRAM_BOT_TOKEN=12345678:replace-me-with-real-token
$ export TELEGRAM_BOT_HOST=real.host.com
$ python3 webhook.py domain_srv.crt domain_srv.key
许可证
aio-telegram-bot
是在麻省理工学院的许可下提供的。