活久见,这一系列竟然又更新了🤦♀️
之前在开发Bot的时候,我们一直使用的是Bot API,也就是官方提供的那个接口。
Bot API本质上是一个中转的接口,背后它会代替我们与Telegram服务器通信。其实对于Bot而言也可以直接绕过这一步的哦。
比较知名的Python MTProto中,有一个叫Telethon。
我的YouTube Download就是用Telethon实现的,但是经常莫名其妙的就卡住,搞了很久也不知道为什么,一直在怀疑是不是任务数量太多导致处理不过来。我甚至还另外搞了一个bot来重启container。再加上我太菜了搞不懂异步,同步使用起来又很麻烦,因此也不太喜欢这个库。
昨天发现一个pyrogram,感觉这个用起来更像pytelegrambotapi,并且type hints也很完善!
使用方法
from pyrogram import Client, filters app = Client("ytdl", api_id, api_hash, bot_token=token) @app.on_message(filters.command(["start"])) def start_handler(client: "Client", message: "types.Message"): chat_id = message.chat.id logging.info("Welcome to youtube-dl bot!") client.send_chat_action(chat_id, "typing") client.send_message(message.chat.id, "Wrapper for youtube-dl.") if __name__ == '__main__': app.run()
使用起来是不是很像pytelegrambotapi,并且加上type hints之后,使用起来就更方便了!
比如说我可以这样使用type hints
bot_msg: typing.Union["types.Message", "typing.Any"] = message.reply_text("Processing", quote=True)
当我想要编辑bot发送的消息时,打个.就全都有啦!
异步
pyrogram其实是原生支持异步的,可是由于我太菜了,一直搞不清楚应该什么时候await,因此用的很少
from pyrogram import Client, filters app = Client("my_account") @app.on_message(filters.private) async def hello(client, message): await message.reply_text(f"Hello {message.from_user.mention}") app.run()
设置worker数量
初始化Client对象时,有一个额外的参数叫workers,默认是CPU数量+4、32中较小值,也可以自己量力而行手动指定一个。
文档
参考 - YouTube Download
https://github.com/tgbot-collection/ytdlbot
在考虑要不要把这个bot做成分布式的,用Celery去做分发,然后加上VIP机制……流量快要吃不消了
--本评论由Telegram Bot回复~❤️
--本评论由Telegram Bot回复~❤️