Привет всем. Я создаю бота на телеграмм, который переводит текст на азбуку Морзе. У меня не получается сделать переключатель языков

Вот как сделать так, чтоб при команде \рус-морзе он переводил с русского на морзе, а при команде \морзе-рус обратно. Весь алгоритм у меня есть. Но у меня не получается отследить команду и сообщение. Мой вопрос, после выбора команды \рус-морзе он должен переводить текст с рус на морзе. А если выбрать команду \морзе-рус он должен делать обратное. но как после выбора команды(языка) отследить сообщение которое он должен перевести. Я ЗНАЮ ПРО БИБЛИОТЕКУ 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()
→ Ссылка