如何通过 python telegram bot 库在固定时间或间隔从 bot 向用户发送消息?
How to send message from bot to user at a fixed time or at intervals through python telegram bot library?
我正在尝试每天向机器人发送消息,而不是从第二次对话开始从用户端(例如 commandhadler)触发。
我已经为机器人构建了一个与用户交互的基本菜单
但我也在尝试每天通过 job_queue
发送消息
我参考了使用命令处理程序的代码
dp.add_handler(CommandHandler("set", set_timer,
pass_args=True,
pass_job_queue=True,
pass_chat_data=True))
这是在用户键入 /set 后设置的。
但我正在尝试找到一种方法来每 30 秒自动发送消息或设置固定时间每天发送消息
我的代码
from telegram.ext import Updater,CommandHandler
from telegram.ext import MessageHandler,Filters,InlineQueryHandler
import logging
import telegram
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger()
def start(bot, update):
update.message.reply_text("Hello , Thanks for choosing us!!")
def callback_minute(context: telegram.ext.CallbackContext):
chat_id = ?
context.bot.send_message(chat_id=chat_id,
text='Hi User, Add Fund to your account to start trading')
def main():
updater = Updater(token,use_context=True)
dp = updater.dispatcher
j = updater.job_queue
dp.add_handler(CommandHandler("start",start))
job_minute = j.run_repeating(callback_minute, interval=10, first=0)
updater.start_polling()
updater.idle()
如何获得chat_id?
如果我使用
def callback_minute(update, context: telegram.ext.CallbackContext):
chat_id = update.message.chat.id
我遇到了这个错误
TypeError: callback_minute() missing 1 required positional argument: 'context'
您必须使用 context.job_queue.run_repeating()
在特定时间间隔后连续重复作业。
如果你希望作业每天执行一次,你可以使用context.job_queue.run_daily()
并指定时间。
这些是针对这两种情况的 python-telegram-bot
文档链接:
job_queue.run_repeating(), job_queue.run_daily()
这些文档有非常好的信息,可以帮助您查询。
下面进行了修改,以便从 /start
命令调用 run_repeating()(正如 Gagan T K 在评论中所建议的那样)。在这个例子中 first=30
所以它将在 30 秒后开始。
在 GitHub 的 the wiki documentation for JobQueue 底部有一个以这种方式使用作业队列的很好的例子。
from telegram.ext import Updater,CommandHandler
from telegram.ext import MessageHandler,Filters,InlineQueryHandler
import logging
import telegram
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger()
bot = telegram.Bot(token=token)
def start(update, context):
context.bot.send_message(chat_id=update.message.chat_id,
text="Hello , Thanks for choosing us!!")
context.job_queue.run_repeating(callback_minute, interval=10, first=30,
context=update.message.chat_id)
def callback_minute(context):
chat_id=context.job.context
context.bot.send_message(chat_id=chat_id,
text="Hi User, Add Fund to your account to start trading")
def main():
updater = Updater(token,use_context=True)
dp = updater.dispatcher
dp.add_handler(CommandHandler("start",start, pass_job_queue=True))
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()
我正在尝试每天向机器人发送消息,而不是从第二次对话开始从用户端(例如 commandhadler)触发。
我已经为机器人构建了一个与用户交互的基本菜单
但我也在尝试每天通过 job_queue
发送消息我参考了使用命令处理程序的代码
dp.add_handler(CommandHandler("set", set_timer,
pass_args=True,
pass_job_queue=True,
pass_chat_data=True))
这是在用户键入 /set 后设置的。 但我正在尝试找到一种方法来每 30 秒自动发送消息或设置固定时间每天发送消息 我的代码
from telegram.ext import Updater,CommandHandler
from telegram.ext import MessageHandler,Filters,InlineQueryHandler
import logging
import telegram
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger()
def start(bot, update):
update.message.reply_text("Hello , Thanks for choosing us!!")
def callback_minute(context: telegram.ext.CallbackContext):
chat_id = ?
context.bot.send_message(chat_id=chat_id,
text='Hi User, Add Fund to your account to start trading')
def main():
updater = Updater(token,use_context=True)
dp = updater.dispatcher
j = updater.job_queue
dp.add_handler(CommandHandler("start",start))
job_minute = j.run_repeating(callback_minute, interval=10, first=0)
updater.start_polling()
updater.idle()
如何获得chat_id? 如果我使用
def callback_minute(update, context: telegram.ext.CallbackContext):
chat_id = update.message.chat.id
我遇到了这个错误
TypeError: callback_minute() missing 1 required positional argument: 'context'
您必须使用 context.job_queue.run_repeating()
在特定时间间隔后连续重复作业。
如果你希望作业每天执行一次,你可以使用context.job_queue.run_daily()
并指定时间。
这些是针对这两种情况的 python-telegram-bot
文档链接:
job_queue.run_repeating(), job_queue.run_daily()
这些文档有非常好的信息,可以帮助您查询。
下面进行了修改,以便从 /start
命令调用 run_repeating()(正如 Gagan T K 在评论中所建议的那样)。在这个例子中 first=30
所以它将在 30 秒后开始。
在 GitHub 的 the wiki documentation for JobQueue 底部有一个以这种方式使用作业队列的很好的例子。
from telegram.ext import Updater,CommandHandler
from telegram.ext import MessageHandler,Filters,InlineQueryHandler
import logging
import telegram
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger()
bot = telegram.Bot(token=token)
def start(update, context):
context.bot.send_message(chat_id=update.message.chat_id,
text="Hello , Thanks for choosing us!!")
context.job_queue.run_repeating(callback_minute, interval=10, first=30,
context=update.message.chat_id)
def callback_minute(context):
chat_id=context.job.context
context.bot.send_message(chat_id=chat_id,
text="Hi User, Add Fund to your account to start trading")
def main():
updater = Updater(token,use_context=True)
dp = updater.dispatcher
dp.add_handler(CommandHandler("start",start, pass_job_queue=True))
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()