使用电报机器人 api、python 3 和 JobQueue 将消息发送到通道的方法

Posted

技术标签:

【中文标题】使用电报机器人 api、python 3 和 JobQueue 将消息发送到通道的方法【英文标题】:Method to send messages to a channel using telegram bot api, python 3 and JobQueue 【发布时间】:2018-03-16 13:04:26 【问题描述】:

基本上,我试图了解此 api 的工作原理,通过执行以下操作,我无法将消息发送到我的频道(我正在从我的电报帐户发送 /test 命令)。另外,例如,我应该如何使用 JobQueue 并每 3 小时发送一次自动消息?文档说明对我不起作用。

def test(bot, update):
    update.send_message(chat_id='@channelid', text='this is a test')

def main():
    # Create the EventHandler and pass it your bot's token.
    updater = Updater("457160310:AAFlxrH2uAaOMGrgO0suOXFM2gVKywsUL0E")
    dp = updater.dispatcher

    dp.add_handler(CommandHandler("test", test))

    dp.add_error_handler(error)

    updater.start_polling()

    updater.idle()


if __name__ == '__main__':
    main()

【问题讨论】:

请注意,您添加了令牌。如果仍然有效,请考虑通过@botfather 进行更改 【参考方案1】:

对于定期发送消息的作业实现,您可以阅读充满示例的this page 。有人应该和你想做的事情完全一样。

关于命令的事情,我认为库没有从通道中获取命令,所以你可以考虑:

在私聊中将命令发送给机器人,机器人将回复发送到频道(我认为更好)

处理来自通道的消息(不是命令)并检查消息文本是否包含命令

我建议第一个解决方案,这样您甚至可以保持频道清洁

【讨论】:

是的,我知道这个页面,问题是这些例子根本不起作用。至于您的第一个考虑因素,这就是我试图用我发布的这段代码做的事情:从我的个人帐户私下发送命令,这样机器人就可以回复频道,而不是回复我。 @user3927607 首先我没有在你的代码中看到作业,所以我不能说哪里出了问题。对于测试函数中的最后一件事,使用 bot.send_message 而不是更新。它应该工作 使用“bot.send_message”解决了这个问题!非常感谢。现在关于工作:代码中没有工作,因为我不知道在哪里实现它:我应该把工作放在主函数中并让这个工作调用另一个函数(例如测试)? 就是这样,我通过在调用测试函数的主函数中添加一个作业来解决问题:) 感谢您的帮助! @user3927607 是的,如果它应该在机器人打开时运行,它必须在 main 中。

以上是关于使用电报机器人 api、python 3 和 JobQueue 将消息发送到通道的方法的主要内容,如果未能解决你的问题,请参考以下文章

如何区分“消息”更新和“回调查询”更新? (电报机器人 API)

电报机器人 - 电报与电报机器人

如何使用电报机器人 api 在群聊中接收消息

使用 pyTelegramBotAPI 和 Telegram Bot API 的区别

使用 ktor 将文件上传到电报 bot api

Python电报机器人降价