Привет всем. Я создаю бота на телеграмм, который переводит текст на азбуку Морзе. У меня не получается сделать переключатель языков
Вот как сделать так, чтоб при команде \рус-морзе он переводил с русского на морзе, а при команде \морзе-рус обратно. Весь алгоритм у меня есть. Но у меня не получается отследить команду и сообщение. Мой вопрос, после выбора команды \рус-морзе он должен переводить текст с рус на морзе. А если выбрать команду \морзе-рус он должен делать обратное. но как после выбора команды(языка) отследить сообщение которое он должен перевести. Я ЗНАЮ ПРО БИБЛИОТЕКУ AIOGRAM, но хотелось бы реализовать проект именно без нее
Спасибо хоть за какие либо подсказки!
'''Morse Trasnlater'''
import telebot
from telebot import types
bot = telebot.TeleBot('token')
def exception(message):
bot.send_message(message.chat.id, "Я могу переводить только <b>русские</b> слова. Отправь текст на <b>русском</b>",parse_mode='html')
@bot.message_handler(commands=['start'])
def start(message):
mess = f"Привет, {message.from_user.first_name}, отправь мне любой текст, и я переведу его на язык МОРЗЕ"
bot.send_message(message.chat.id, mess)
@bot.message_handler(content_types=['text'])
def translate(message):
morse = {
'А' : '.-' ,'Б' : '-..' ,'В': '.--' ,'Г': '--.' ,'Д': '-..' ,'Е': '.' ,'Ж': '...-' ,'З': '--..' ,'И': '..' ,'Й': '.---' ,'К': '-.-' ,
'Л': '.-..' ,'М': '--' ,'Н': '-.' ,'О': '---' ,'П': '.--.' ,'Р': '.-.' ,'С': '...' ,'Т': '-' ,'У': '..-' ,'Ф': '..-.' ,
'Х': '....' ,'Ц': '-.-.' ,'Ч': '---.' ,'Ш': '----' ,'Щ': '--.-' ,'Ъ': '.--.-.' ,'Ы': '-.--' ,'Ь': '-..-' ,
'Э': '...-...' ,'Ю': '..--' ,'Я': '.-.-', ' ' : ' '
}
try:
result = ''
textmes = message.text
mess = textmes.upper()
for i in range(len(mess)):
list_letters = list(mess)
result += f'| {morse[list_letters[i]]} |'
bot.send_message(message.chat.id, result)
except KeyError:
exception(message)
bot.polling(none_stop = True)
Ответы (1 шт):
Автор решения: Edward Grachev
→ Ссылка
Примерно как-то так. Храним стейт в словаре для каждого чата.
import telebot
bot = telebot.TeleBot('5499182971:AAEcxJkG5iTgzl8H7jsRSoR-sUnQo5urZbw')
STATE = {}
MORSE = {
'А': '.-', 'Б': '-..', 'В': '.--', 'Г': '--.', 'Д': '-..', 'Е': '.', 'Ж': '...-', 'З': '--..', 'И': '..',
'Й': '.---', 'К': '-.-',
'Л': '.-..', 'М': '--', 'Н': '-.', 'О': '---', 'П': '.--.', 'Р': '.-.', 'С': '...', 'Т': '-', 'У': '..-',
'Ф': '..-.',
'Х': '....', 'Ц': '-.-.', 'Ч': '---.', 'Ш': '----', 'Щ': '--.-', 'Ъ': '.--.-.', 'Ы': '-.--', 'Ь': '-..-',
'Э': '...-...', 'Ю': '..--', 'Я': '.-.-', ' ': ' '
}
def exception(message):
bot.send_message(message.chat.id, "Я могу переводить только <b>русские</b> слова. Отправь текст на <b>русском</b>",
parse_mode='html')
@bot.message_handler(commands=['start'])
def start(message):
mess = f"Привет, {message.from_user.first_name}, отправь мне любой текст, и я переведу его на язык МОРЗЕ"
bot.send_message(message.chat.id, mess)
@bot.message_handler(commands=['ru_morse'])
def ru_morse(message):
MORSE.update({message.chat.id: 'RU'})
bot.send_message(message.chat.id, 'Пришлите текст')
@bot.message_handler(commands=['morse_ru'])
def morse_ru(message):
MORSE.update({message.chat.id: 'MORSE'})
bot.send_message(message.chat.id, 'Пришлите текст')
@bot.message_handler(content_types=['text'])
def translate(message):
try:
state = MORSE.get(message.chat.id)
if state is not None:
result = ''
text = message.text.upper()
if state == "RU":
for i in text:
result += f" {MORSE.get(i)}"
elif state == 'MORSE':
text = text.split()
for i in text:
for k, v in MORSE.items():
if v == i:
result += k
break
bot.send_message(message.chat.id, result)
MORSE.pop(message.chat.id)
else:
bot.send_message(message.chat.id, "Необходимо выбрать перевод")
except KeyError:
exception(message)
bot.infinity_polling()