python - 在没有用户命令的情况下使用 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()
任何可能的方法来实现这一点都会很棒。
解决方案
您不能使用update
and调用函数,context
因为电报服务器没有更新可操作。换句话说,没有事件可以执行回调。
根据您想要做什么,您可以使用 aMessageHandler
而不是 aCommandHandler
来回复任何消息,Filters
以过滤掉要回复的消息
或者,如果您想在每次启动机器人时发送消息并且您知道将消息发送给谁(即您有他们的chat_id
),您可以这样做
if condition:
updater.bot.send_message(chat_id=CHAT_ID, text="message back")
或者,如果您只想在每次用户开始与您的机器人聊天时发送一条消息,您可以使用start
默认发送的命令来开始与机器人聊天
推荐阅读
- reactjs - 将 Skyscanner 小部件与 React 集成
- node.js - 谷歌身份验证挂起等待响应
- amazon-web-services - 如何在 cognito 上创建自定义用户池,并将其连接到您的应用程序
- vim - 如何在vim中自动生成像IDEA这样的局部变量
- javascript - 加载动态 html jQuery 更改 GET 脚本路径
- macos - UNUserNotificationCenter 总是拒绝授权
- java - 堆叠新阶段而不是叠加
- python - 海龟图形 begin_fill() 函数在 MAC 上无法正常工作
- java - 签名长度不正确:得到 768 但预期为 512,在 Java 中验证
- excel - 成对列的条件格式