如何在 Python 中将字符串转换为 telebot.types.message?

How to convert string to telebot.types.message in Python?

我正在学习如何使用 telebot 创建电报机器人。用户输入严格包含 2 个词的查询:“莫斯科天气”或“巴黎湿度”。我将字符串拆分为 2 个列表项。然后我想使用列表的第一个元素——城市。但这是一个字符串,telebot 只能使用 types.message 代码 1,对不起俄语:

sps = message.text.lower().split(' ')
        if len(sps) > 2:
            bot.send_message(message.chat.id, 'Неверный запрос. Следует вводить так: Погода Москва или Влажность Пермь\n'
                                              'или воспользуйтесь клавиатурой')
        elif sps[0] in ['погода', 'осадки', 'влажность', 'давление', 'ад', 'ветер', 'температура']:
            if sps[0] == 'погода':
                bot.register_next_step_handler(sps[1], send_message_6)
            if sps[0] == 'температура':
                bot.register_next_step_handler(sps[1], send_message_1)
            if sps[0] == 'осадки':
                bot.register_next_step_handler(sps[1], send_message_2)
            if sps[0] == 'ветер':
                bot.register_next_step_handler(sps[1], send_message_3)
            if sps[0] == 'влажность':
                bot.register_next_step_handler(sps[1], send_message_4)
            if sps[0] == 'давление' or 'ад':
                bot.register_next_step_handler(sps[1], send_message_5)

代码 2:

def send_message_6(message_6):
    try:
        city = cities_dict.rus_cities[message_6.text.lower()]
        req = requests.get('https://yandex.ru/pogoda/' + str(city))
        html = bs(req.content, 'html.parser')
        current_temp = html.select('.content__row .temp__value')[1].text
        feel_temp = html.select('.term__value .temp__value')[1].text
        wind = html.select('.fact__props .term__value')[0].text
        humidity = html.select('.fact__props .term__value')[1].text
        pressure = html.select('.fact__props .term__value')[2].text
        state = html.select('.link__feelings .link__condition')[0].text
        bot.send_message(message_6.chat.id, f'Итак, вот какая погода в твоем городе\n'
                                          f'Город:{message_6.text}\n'
                                      f'Текушая температура:{current_temp}\n'
                                      f'Ощущается как:{feel_temp}\n'
                                      f'{state}\n'
                                      f'Ветер:{wind}\n'
                                      f'Влажность:{humidity}\n'
                                      f'Давление:{pressure}')

        bot.send_message(message_6.chat.id, 'Назови цифру, которая соответствует твоему запросу:\n'
                                      '1 - Узнать температуру\n'
                                      '2 - Узнать наличие осадков\n'
                                      '3 - Узнать скорость и направление ветра\n'
                                      '4 - Узнать влажность воздуха\n'
                                      '5 - Узнать атмосферное давление\n'
                                      '6 - Узнать все сразу', reply_markup=keyboard3)
    except (AttributeError, KeyError) :
        bot.send_message(message_6.chat.id, 'Видимо, твоего города я не знаю, но я еще учусь')
        pass

def send_message_1(message_1):
    try:
        city = cities_dict.rus_cities[message_1.text.lower()]
        req = requests.get('https://yandex.ru/pogoda/' + str(city))
        html = bs(req.content, 'html.parser')
        current_temp = html.select('.content__row .temp__value')[1].text
        feel_temp = html.select('.term__value .temp__value')[1].text
        bot.send_message(message_1.chat.id, f'Итак, вот что с температурой в твоем городе\n'
                                        f'Город:{message_1.text}\n'
                                        f'Текушая температура:{current_temp}\n'
                                        f'Ощущается как:{feel_temp}\n')
        bot.send_message(message_1.chat.id, 'Назови цифру, которая соответствует твоему запросу:\n'
                                        '1 - Узнать температуру\n'
                                        '2 - Узнать наличие осадков\n'
                                        '3 - Узнать скорость и направление ветра\n'
                                        '4 - Узнать влажность воздуха\n'
                                        '5 - Узнать атмосферное давление\n'
                                        '6 - Узнать все сразу', reply_markup=keyboard3)
    except (AttributeError, KeyError):
        bot.send_message(message_1.chat.id, 'Видимо, твоего города я не знаю, но я еще учусь')
        pass

其他def send_message_#相同

请 post 代码(包括创建 sps 的行)。

通常,register_next_step_handler() 需要两个参数:要遵循的消息和用于下一步的函数(请参阅 here 示例)。

尝试按以下方式修改您的代码(希望思路清晰):

sps = message.text.lower().split(' ')
        if len(sps) > 2:
            bot.send_message(message.chat.id, 'Неверный запрос. Следует вводить так: Погода Москва или Влажность Пермь\n'
                                              'или воспользуйтесь клавиатурой')

bot.register_next_step_handler(message, step2)

def step2(message):
    sps = message.text.lower().split(' ')
    if sps[0] == 'погода':
         try:
             city = cities_dict.rus_cities[sps[1]]
             req = requests.get('https://yandex.ru/pogoda/' + str(city))
             html = bs(req.content, 'html.parser')
             current_temp = html.select('.content__row .temp__value')[1].text
             feel_temp = html.select('.term__value .temp__value')[1].text
             wind = html.select('.fact__props .term__value')[0].text
             humidity = html.select('.fact__props .term__value')[1].text
             pressure = html.select('.fact__props .term__value')[2].text
             state = html.select('.link__feelings .link__condition')[0].text

             bot.send_message(message.chat.id, f'Итак, вот какая погода в твоем городе\n'
                                          f'Город:{message_6.text}\n'
                                      f'Текушая температура:{current_temp}\n'
                                      f'Ощущается как:{feel_temp}\n'
                                      f'{state}\n'
                                      f'Ветер:{wind}\n'
                                      f'Влажность:{humidity}\n'
                                      f'Давление:{pressure}')

    elif sps[1] == 'влажность':
        ...

您可以通过以下方式创建消息:

msg = types.Message(message_id=0,
                    from_user=0,
                    date='',
                    chat = 0,
                    content_type='text',
                    options=[],
                    json_string='')
msg.text = 'Hi there. I am the message text.'

但坦率地说,使用起来似乎有点奇怪:)