Telegram-бот, ответ на нажатие кнопки не отправляется

Я делаю помощника по формулам бота для Telegram. Есть проблема, при нажатии кнопки "Механика" бот реагирует, а при нажатии "Электрические и магнитные явления" нет, что делать? Я все еще новичок, если что!

import telebot
import random
from telebot import types
import requests


token = ("this token")
bot = telebot.TeleBot(token)
@bot.message_handler(commands=["start"])
def start(message: types.Message):
    bot.send_message(
        message.chat.id,
        text = "Привет, меня зовут Гена и я твой личный помощник по физике!".format(message.from_user))
    bot.send_message(
        message.chat.id,
        text = "Пока что я умею только показывать нужные тебе формулы, но скоро я научусь чему-то новому! Используй команду /formuls !".format(message.from_user),reply_markup=types.ReplyKeyboardRemove())

@bot.message_handler(commands=["formuls"])
def formuls(message: types.Message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn1 = types.KeyboardButton("🔍Механика🔍")
    btn2 = types.KeyboardButton("⚡️Электрические и магнитные явления💡")
    markup.add(btn1, btn2)
    bot.send_message(
        message.chat.id,
        text= "Выбирай раздел!".format(message.from_user),reply_markup=markup)

@bot.message_handler(func=lambda msg: msg.text == "🔍Механика🔍")
def message(message: types.Message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn1 = types.KeyboardButton("️➡️Прямолинейное равномерное движение➡️")
    btn2 = types.KeyboardButton("➡️Прямолинейное равноускоренное движение➡️")
    btn3 = types.KeyboardButton("⬆️Движение вертикально вверх⬆️")
    btn4 = types.KeyboardButton("🔄Движение по окружности🔄")
    btn5 = types.KeyboardButton("🪶Свободное падение🪶")
    btn6 = types.KeyboardButton("👨🏻‍🎓Законы Ньютона👨🏻‍🎓")
    btn7 = types.KeyboardButton("🌎Закон всемирного тяготения🌎")
    markup.add(btn1,btn2,btn3,btn4,btn5,btn6,btn7)
    bot.send_message(
        message.chat.id,
        text = "Какие формулы именно вас инетерсуют?".format(message.from_user),reply_markup=markup
    )

@bot.message_handler(func=lambda msg: msg.text= = "️⚡️Электрические и магнитные явления💡")
def messageElec(message: types.Message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn1 = types.KeyboardButton("🔌Электростатика🔌")
    btn2 = types.KeyboardButton("💡Законы постоянного тока💡")
    btn3 = types.KeyboardButton("🔌Электрический ток в постоянных средах🔌")
    btn4 = types.KeyboardButton("🧲Магнетизм🧲")
    btn5 = types.KeyboardButton("💡Электромагнитная индукция💡")
    markup.add(btn1, btn2, btn3, btn4, btn5)
    bot.send_message(
        message.chat.id,
        text = "Какие формулы именно вас инетерсуют?".format(message.from_user),reply_markup=markup
    )

@bot.message_handler(func=lambda msg: msg.text == "️➡️Прямолинейное равномерное движение➡️")
def get_user_photo(message: types.Message):
    bot.send_photo(message.chat.id, "https://imgur.com/vwJ5pTM")

@bot.message_handler(func=lambda msg: msg.text == "➡️Прямолинейное равноускоренное движение➡️")
def get_user_photo(message: types.Message):
    bot.send_photo(message.chat.id, "https://imgur.com/datM6mw")

@bot.message_handler(func=lambda msg: msg.text == "⬆️Движение вертикально вверх⬆️")
def get_user_photo(message: types.Message):
    bot.send_photo(message.chat.id, "https://imgur.com/z8JVbJX")

@bot.message_handler(func=lambda msg: msg.text == "🔄Движение по окружности🔄")
def get_user_photo(message: types.Message):
    bot.send_photo(message.chat.id, "https://imgur.com/AGhIy2b")

@bot.message_handler(func=lambda msg: msg.text == "🪶Свободное падение🪶")
def get_user_photo(message: types.Message):
    bot.send_photo(message.chat.id, "https://imgur.com/j1GhqCz")

@bot.message_handler(func=lambda msg: msg.text == "👨🏻‍🎓Законы Ньютона👨🏻‍🎓")
def get_user_photo(message: types.Message):
    bot.send_photo(message.chat.id, "https://imgur.com/UDmMPVS")

@bot.message_handler(func=lambda msg: msg.text == "🌎Закон всемирного тяготения🌎")
def get_user_photo(message: types.Message):
    bot.send_photo(message.chat.id, "https://imgur.com/T3mxRIp")



bot.polling(none_stop=True)

Из всех моих предположений было изменить имя функции, но это не принесло плодов :(

Я взял строку "️⚡️Электрические и магнитные явления💡" из KeyboardButton() и из msg.text==, использовал == для их сравнения и получил False — так что у вас есть две разные строки. Возможно, они выглядят одинаково, но используют разные символы. Вы можете использовать цикл for с zip(text1, text2) для сравнения символов по символам.

furas 29.04.2024 02:11

когда я сравниваю посимвольно, одна строка начинается с невидимого символа с кодом 65039 - и я не могу его удалить. Возможно, это какая-то кодировка. Самое простое решение: скопировать строку из одного места в другое.

furas 29.04.2024 02:22

Я проверил unicode 65039 в Google, и там есть emoji variation selector - так что вся проблема сделана в смайликах.

furas 29.04.2024 02:25
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
82
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я взял строку "️⚡️Электрические и магнитные явления💡" из KeyboardButton() и из msg.text==..., использовал == для их сравнения и получил False — так что у вас есть две разные строки.

Когда я сравниваю посимвольно, одна строка начинается с невидимого символа с кодом 65039, и я не могу его удалить.

Я проверил unicode 65039 в Google, и там есть emoji variation selector - так что вся проблема сделана в смайликах.

Самое простое решение: скопировать строку из одного места в другое.


text1 = "⚡️Электрические и магнитные явления💡"
text2 = "️⚡️Электрические и магнитные явления💡"

for char1, char2 in zip(text1, text2):
    print(char1, char2, ord(char1), ord(char2), char1==char2)

Результат:

⚡ ️ 9889 65039 False
 ⚡ 65039 9889 False
Э ️ 1069 65039 False
л Э 1083 1069 False
е л 1077 1083 False
к е 1082 1077 False
т к 1090 1082 False
р т 1088 1090 False
и р 1080 1088 False
ч и 1095 1080 False
е ч 1077 1095 False
с е 1089 1077 False
к с 1082 1089 False
и к 1080 1082 False
е и 1077 1080 False
  е 32 1077 False
и   1080 32 False
  и 32 1080 False
м   1084 32 False
а м 1072 1084 False
г а 1075 1072 False
н г 1085 1075 False
и н 1080 1085 False
т и 1090 1080 False
н т 1085 1090 False
ы н 1099 1085 False
е ы 1077 1099 False
  е 32 1077 False
я   1103 32 False
в я 1074 1103 False
л в 1083 1074 False
е л 1077 1083 False
н е 1085 1077 False
и н 1080 1085 False
я и 1103 1080 False
💡 я 128161 1103 False

Я попробовал заменить его, и это действительно сработало! Большое вам спасибо за вашу помощь!

The Foxis 29.04.2024 13:32

Другие вопросы по теме