首页 > 解决方案 > 在没有用户命令的情况下使用 python 电报机器人发送消息?

问题描述

有没有办法在没有机器人用户命令的情况下发送消息(调用函数)?例如,当满足某个条件时?

目前我只能通过命令调用函数。

我一直在尝试以下方法:

from telegram.ext import Updater, CommandHandler, CallbackContext
from telegram import Update
from datetime import datetime
import telebot as tb
import logging

bot = tb.TeleBot(API_KEY)

logging.basicConfig(
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO
)
logger = logging.getLogger(__name__)


def messager(update: Update, context: CallbackContext) -> None:
    """this function messages at a specific time"""
    update.message.reply_text("message back")

if __name__ == "__main__":
    updater = Updater(API_KEY)

    dispatcher = updater.dispatcher

    dispatcher.add_handler(CommandHandler("message", messager))

    condition = False #I have been changing this when testing
    if (condition == True):
        messager() # how to call messager here? how to pass update and context arguments?

    updater.start_polling()
    updater.idle()

任何可能的方法来实现这一点都会很棒。

标签: pythontelegramtelegram-bot

解决方案


您不能使用updateand调用函数,context因为电报服务器没有更新可操作。换句话说,没有事件可以执行回调。

根据您想要做什么,您可以使用 aMessageHandler而不是 aCommandHandler来回复任何消息,Filters以过滤掉要回复的消息

或者,如果您想在每次启动机器人时发送消息并且您知道将消息发送给谁(即您有他们的chat_id),您可以这样做

if condition:
    updater.bot.send_message(chat_id=CHAT_ID, text="message back")

或者,如果您只想在每次用户开始与您的机器人聊天时发送一条消息,您可以使用start默认发送的命令来开始与机器人聊天


推荐阅读