用于构建自己的电报机器人的异步框架

aio-telegram-bot的Python项目详细描述


AIO电报机器人

Build Statuscodecov

用于在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是在麻省理工学院的许可下提供的。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
AmazonS3查找从S3forJava下载的压缩文件的MIME类型   java如何使用Selenium在<span>中查找具有特定文本的元素   python如何使用OpenIEDemo生成自定义三元组。由stanfordnlp提供的java   java遇到“方法不适用”编译错误   java如何使用Mockito在Looper中运行的验证代码。getMainLooper?   类Java目录错误   java在已知其他泛型信息时使用原始类型   java connect()和disconnect()在哪里实现?   java使用PDF Box库拆分PDF,生成的PDF几乎与源PDF文件大小相同   java PowerMockito返回错误的对象   java如何找到TIBCO集合消息的字节编码?   java Basic音乐播放器下一步和上一步按钮   添加模块描述符时,java没有名为“entityManagerFactory”的bean可用   java为什么我的代码不是线程安全的?   eclipse java。引用项目中的类的lang.NoClassDefFoundError