登录
  • 人们都希望被别人需要 却往往事与愿违
  • 我每天都自问: '如果今天是我生命的最后一天, 我还会做今天打算做的事情吗?@史蒂夫·乔布斯

[Telegram bot 系列]3: 使用MTProto协议

编程 Benny小土豆 2944次浏览 1377字 4个评论
文章目录[显示]

活久见,这一系列竟然又更新了🤦‍♀️

之前在开发Bot的时候,我们一直使用的是Bot API,也就是官方提供的那个接口。

Bot API本质上是一个中转的接口,背后它会代替我们与Telegram服务器通信。其实对于Bot而言也可以直接绕过这一步的哦。

[Telegram bot 系列]3: 使用MTProto协议

比较知名的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发送的消息时,打个.就全都有啦!

[Telegram bot 系列]3: 使用MTProto协议

异步

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中较小值,也可以自己量力而行手动指定一个。

文档

https://docs.pyrogram.org/

参考 - YouTube Download

https://github.com/tgbot-collection/ytdlbot

在考虑要不要把这个bot做成分布式的,用Celery去做分发,然后加上VIP机制……流量快要吃不消了

[Telegram bot 系列]3: 使用MTProto协议


文章版权归原作者所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权|
转载必须包含本声明,并以超链接形式注明原作者和本文原始地址:
https://dmesg.app/tgbot3.html
喜欢 (28)
分享:-)
关于作者:
If you have any further questions, feel free to contact me in English or Chinese.
发表我的评论(代码和日志请使用Pastebin或Gist)
取消评论

                     

去你妹的实名制!

  • 昵称 (必填)
  • 邮箱 (必填,不要邮件提醒可以随便写)
  • 网址 (选填)
(4)个小伙伴在吐槽
  1. 这个流量还好吧,没想到这种机器人也有这么大用量。
    贝昕2021-09-30 12:33 回复
    • 现在是一天100-300G
      --本评论由Telegram Bot回复~❤️
      Benny小土豆2021-09-30 12:33 回复
  2. wait wait 世界这么小吗 :?: 我刚刚才在惋惜bennythink网站打不开了 然后看到argo免费(又可以瞎折腾啦啦啦)一搜索 竟然是小土豆 :lol: 邮箱就不留了 上一个programthink都vanish了 不过作者能够回复一下也是极好的
    Asi2021-08-20 21:23 回复
    • 🤔🤔那个域名不用很久了,看来要继续301呀
      --本评论由Telegram Bot回复~❤️
      Benny小土豆2021-08-20 21:29 回复