如何在 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.'
但坦率地说,使用起来似乎有点奇怪:)
我正在学习如何使用 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.'
但坦率地说,使用起来似乎有点奇怪:)