首页 > 解决方案 > 使用 call.message 对象发送消息

问题描述

关键是我想自动返回到我的机器人的开始菜单。

当我得到message对象时,这很好:我分配message.text = '/start'并调用了start_menu(message).

@bot.message_handler()
def start_menu(message):
    if message.text == '/start':
         # ...
         # some code
         # ...

def get_something(message):
    # ...
    # some code 
    # ...
    message.text = '/start'
    start_menu(message)

call.message但是当我对object from进行同样的尝试时callback_query_handler(),我遇到了一个错误

def some_function(message):
    # ...
    # some code 
    # ...
    message.text = '/start'
    start_menu(message)

@bot.callback_query_handler(func=lambda call: True)
def callback_worker(call):
    if call.data == 'some_data':
        some_function(call.message)

对 Telegram API 的请求不成功。错误代码:403。说明:禁止:机器人无法向机器人发送消息

我尝试创建新对象,但是从函数中使用时message遇到了message.from_user字段问题。bot.send_message()start_menu(message)

def some_function(message):
    # ...
    # some code 
    # ...
    new_message = telebot.types.Message(message_id=message.message_id,
                                        chat=message.chat,
                                        content_type=["text"],
                                        date=dt.datetime.today().timestamp(),
                                        from_user=message.chat.id,
                                        options={},
                                        json_string="")
    new_message.text = '/start'
    start_menu(new_message)

bot.send_message(message.from_user.id, title) > AttributeError: 'int' object has no attribute 'id'

所以,我想我需要在定义时使用其他东西来初始化from_user字段new_message。但是已经不知道了。

请帮忙。提前感谢

标签: pythonpy-telegram-bot-api

解决方案


解决了。

如果传递给from_user字段call.message.chat对象本身,它会起作用。

def some_function(message):
    # ...
    # some code 
    # ...
    new_message = telebot.types.Message(message_id=message.message_id,
                                        chat=message.chat,
                                        content_type=["text"],
                                        date=dt.datetime.today().timestamp(),
                                        from_user=message.chat,
                                        options={},
                                        json_string="")
    new_message.text = '/start'
    start_menu(new_message)

推荐阅读