如何使私人电报机器人只能由其所有者访问?
Posted
技术标签:
【中文标题】如何使私人电报机器人只能由其所有者访问?【英文标题】:How to make a private Telegram bot accessible only by its owner? 【发布时间】:2018-02-11 09:48:55 【问题描述】:我正在开发一个 Telegram 机器人,它应该只能由其所有者访问(只有所有者才能将其添加到组或在搜索中看到它)。是否可以通过 Telegram 服务(如 BotFather)来实现这一点,或者如果向机器人发送消息的人是所有者,我应该检查我的代码吗?
【问题讨论】:
【参考方案1】:你可以在设置中这样做,你需要自己检查,如果.message.from.id
不等于你的就退出程序。
您可以通过/setjoingroup
禁用加入群组,但您也不能邀请机器人加入群组。
【讨论】:
不会退出程序会阻止机器人在我的私人频道或群组上工作吗?我不应该忽略来自无法识别的源的 /start 命令吗? @Eitan 我没听懂你。 :(【参考方案2】:BotFather 无能为力。 唯一的方法是在你的代码中检查它。
【讨论】:
【参考方案3】:您可以在代码中查看聊天 ID(9 位数字)。
例如,如果您使用this 包装器创建机器人,则可以使用update.message.chat_id
获取聊天ID。您还可以检查名字 (update.message.from_user.first_name
) 和姓氏 (update.message.from_user.last_name
)。
【讨论】:
【参考方案4】:几周前我开始研究 Telegram 的机器人。为此,我在规范中阅读了无法从 botfather 创建私人机器人。唯一的方法是使用 /password 之类的自定义命令向机器人发送密码,然后保留客户端的聊天 ID(当然,当密码正确时......)。您的机器人只需要接受来自记忆/经过验证的聊天 ID 的命令,就像您以经典方式对任何其他应用程序一样。
【讨论】:
【参考方案5】:电报文档中描述了另一个选项。
您可以使用deeplink 从链接中获取唯一密钥并保护您的机器人。 拒绝任何没有密钥的人访问您的代码。
来自文档:
-
使用合适的用户名创建机器人,例如@ExampleComBot
为传入消息设置 webhook
生成一个足够长的随机字符串,例如
$memcache_key = "vCH1vGWJxfSeofSAs0K5PA"
将值 123 和键 $memcache_key
放入 Memcache 3600 秒(一小时)
向我们的用户显示按钮https://t.me/ExampleComBot?start=vCH1vGWJxfSeofSAs0K5PA
配置 webhook 处理器以使用以 /start 开头的传入消息中传递的参数查询 Memcached。如果密钥存在,则将传递给 webhook 的 chat_id 记录为用户 123 的 telegram_chat_id
。从 Memcache 中删除密钥。
现在,当我们要向用户 123 发送通知时,请检查他们是否有字段 telegram_chat_id
。如果是,请使用 Bot API 中的 sendMessage
方法在 Telegram 中向他们发送消息。
【讨论】:
回复您刚刚删除的问题:查看top-levelawait
。 Webpack 支持它。 const go = await import(/*...*/);
在你的路由模块的顶层。以上是关于如何使私人电报机器人只能由其所有者访问?的主要内容,如果未能解决你的问题,请参考以下文章