Проблема с телеграм ботом
В целях практики и самообучения решил сделать телеграм бота, который переводит текст с любого языка на любой, изначально он работал, но когда его немного переделал, чтобы проверялось корректно ли введен язык, на который нужно перевести, все стало идти не по плану. Сначала идет проверка правильно ли введен язык, на который нужно перевести, если нет, то просит ввести правильно, после чего флаг переводится в True, чтобы дать понять следующему условию что язык введен, дальше идет проверка текст это или нет, если да, то должен произойти его перевод, но он не происходит, просит ввести язык корректно.
#1
import telebot
import translator_bot
bot = telebot.TeleBot(TOKEN)
@bot.message_handler(commands=["start"])
def start(m, res=False):
bot.send_message(m.chat.id, f'''
Это тестовый бот переводчик
На какой язык перевести ваш текст ?
Для смены смены языка либо заново введите команду /start, либо напишите название языка для перевода''')
@bot.message_handler(content_types=["text"])
def user_text(message):
global flag
global result_dest
flag = False
if translator_bot.is_language(message.text) is True:
bot.send_message(message.chat.id, 'Введите ваш текст на любом языке')
result_dest = translator_bot.get_dest(message.text)
flag = True
elif flag == True and translator_bot.is_text(message.text) == True:
result_src = translator_bot.get_src(message.text)
result_text = translator_bot.translating(message.text, result_src, result_dest)
bot.send_message(message.chat.id, result_text)
else:
bot.send_message(message.chat.id, 'Введите язык корректно')
bot.polling(none_stop=True, interval=0)
#2
from googletrans import Translator
languages = {
'af': 'afrikaans',
'sq': 'albanian',
'am': 'amharic',
'ar': 'arabic',
'hy': 'armenian',
'az': 'azerbaijani',
'eu': 'basque',
'be': 'belarusian',
'bn': 'bengali',
'bs': 'bosnian',
'bg': 'bulgarian',
'ca': 'catalan',
'ceb': 'cebuano',
'ny': 'chichewa',
'zh-cn': 'chinese (simplified)',
'zh-tw': 'chinese (traditional)',
'co': 'corsican',
'hr': 'croatian',
'cs': 'czech',
'da': 'danish',
'nl': 'dutch',
'en': 'english',
'eo': 'esperanto',
'et': 'estonian',
'tl': 'filipino',
'fi': 'finnish',
'fr': 'french',
'fy': 'frisian',
'gl': 'galician',
'ka': 'georgian',
'de': 'german',
'el': 'greek',
'gu': 'gujarati',
'ht': 'haitian creole',
'ha': 'hausa',
'haw': 'hawaiian',
'iw': 'hebrew',
'hi': 'hindi',
'hmn': 'hmong',
'hu': 'hungarian',
'is': 'icelandic',
'ig': 'igbo',
'id': 'indonesian',
'ga': 'irish',
'it': 'italian',
'ja': 'japanese',
'jw': 'javanese',
'kn': 'kannada',
'kk': 'kazakh',
'km': 'khmer',
'ko': 'korean',
'ku': 'kurdish (kurmanji)',
'ky': 'kyrgyz',
'lo': 'lao',
'la': 'latin',
'lv': 'latvian',
'lt': 'lithuanian',
'lb': 'luxembourgish',
'mk': 'macedonian',
'mg': 'malagasy',
'ms': 'malay',
'ml': 'malayalam',
'mt': 'maltese',
'mi': 'maori',
'mr': 'marathi',
'mn': 'mongolian',
'my': 'myanmar (burmese)',
'ne': 'nepali',
'no': 'norwegian',
'ps': 'pashto',
'fa': 'persian',
'pl': 'polish',
'pt': 'portuguese',
'pa': 'punjabi',
'ro': 'romanian',
'ru': 'russian',
'sm': 'samoan',
'gd': 'scots gaelic',
'sr': 'serbian',
'st': 'sesotho',
'sn': 'shona',
'sd': 'sindhi',
'si': 'sinhala',
'sk': 'slovak',
'sl': 'slovenian',
'so': 'somali',
'es': 'spanish',
'su': 'sundanese',
'sw': 'swahili',
'sv': 'swedish',
'tg': 'tajik',
'ta': 'tamil',
'te': 'telugu',
'th': 'thai',
'tr': 'turkish',
'uk': 'ukrainian',
'ur': 'urdu',
'uz': 'uzbek',
'vi': 'vietnamese',
'cy': 'welsh',
'xh': 'xhosa',
'yi': 'yiddish',
'yo': 'yoruba',
'zu': 'zulu',
'fil': 'Filipino',
'he': 'Hebrew'
}
translator = Translator()
def get_dest(value):
value = translator.translate(value, src= 'ru', dest = 'en').text.lower()
for k, v in languages.items():
if v == value:
return k
def translating(text, src, dest):
language = translator.translate(text, src= src, dest = dest)
return language.text
def is_language(text):
if translating(text, 'ru', 'en').lower() in languages.values():
return True
def is_text(text):
if translating(text, 'ru', 'en').lower() not in languages.values():
return True
def get_src(value):
return translator.detect(value).lang.lower()
Спустя кучу времени все таки исправил это. Насколько это решение плохо или не плохо, и есть ли более лучшие альтернативы решения ?
import telebot
import translator_bot
bot = telebot.TeleBot(TOKEN)
@bot.message_handler(commands=["start"])
def start(m, res=False):
bot.send_message(m.chat.id, f'''
Это тестовый бот переводчик
На какой язык перевести ваш текст ?
Для смены смены языка либо заново введите команду /start, либо напишите название языка для перевода''')
@bot.message_handler(content_types=["text"])
def user_text(message):
global result_dest
try:
if translator_bot.is_language(message.text) is True:
bot.send_message(message.chat.id, 'Введите ваш текст на любом языке')
result_dest = translator_bot.get_dest(message.text)
# Проверка, что введенный текст это язык
else:
if translator_bot.is_language(message.text) is not True and translator_bot.is_text(message.text) == True:
result_src = translator_bot.get_src(message.text)
result_text = translator_bot.translating(message.text, result_src, result_dest)
bot.send_message(message.chat.id, result_text)
else:
bot.send_message(message.chat.id, 'Введите язык корректно')
except Exception as e:
bot.send_message(message.chat.id, 'Введите язык корректно')

