ReconMadeIt commited on
Commit
429787c
·
verified ·
1 Parent(s): 952e0e7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -21
app.py CHANGED
@@ -8,62 +8,68 @@ import asyncio
8
  from telegram import Update
9
  from telegram.ext import ApplicationBuilder, ContextTypes, MessageHandler, filters
10
 
11
- # 1. Загрузка модели и токенайзера
12
  model_name = "facebook/mms-tts-che"
13
  model = VitsModel.from_pretrained(model_name)
14
  tokenizer = AutoTokenizer.from_pretrained(model_name)
15
 
16
- # Функция генерации звука
17
  def tts_chechen_logic(text):
18
  inputs = tokenizer(text.lower(), return_tensors="pt")
19
  with torch.no_grad():
20
  output = model(**inputs).waveform
21
 
22
- # Сохраняем во временный файл для Telegram
23
  sampling_rate = model.config.sampling_rate
24
  audio_data = output.squeeze().numpy()
25
- file_path = "voice.wav"
26
- scipy.io.wavfile.write(file_path, rate=sampling_rate, data=audio_data)
27
- return sampling_rate, audio_data, file_path
 
28
 
29
  # --- БЛОК TELEGRAM БОТА ---
30
- TG_TOKEN = "8287698372:AAEwoOWgQWHbeyDmJdN0B-OpKpy7-TARHMg"
31
 
32
  async def handle_tg_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
 
 
 
33
  user_text = update.message.text
 
34
  try:
35
- # Генерируем звук
36
  _, _, file_path = tts_chechen_logic(user_text)
37
- # Отправляем в чат
38
  with open(file_path, 'rb') as audio:
39
  await context.bot.send_voice(chat_id=update.effective_chat.id, voice=audio)
40
  except Exception as e:
41
- print(f"Ошибка бота: {e}")
42
 
43
- def run_bot():
44
- # Создаем новый цикл событий для бота в отдельном потоке
45
  loop = asyncio.new_event_loop()
46
  asyncio.set_event_loop(loop)
 
 
47
  app = ApplicationBuilder().token(TG_TOKEN).build()
48
  app.add_handler(MessageHandler(filters.TEXT & (~filters.COMMAND), handle_tg_message))
49
- app.run_polling()
 
 
 
50
 
51
- # Запускаем бота "в фоне"
52
- threading.Thread(target=run_bot, daemon=True).start()
 
53
  # --------------------------
54
 
55
- # Функция для интерфейса Gradio
56
  def gradio_interface(text):
57
  sr, audio, _ = tts_chechen_logic(text)
58
  return (sr, audio)
59
 
60
- # Настройка внешнего вида сайта
61
  iface = gr.Interface(
62
  fn=gradio_interface,
63
- inputs=gr.Textbox(label="Введите текст на чеченском", placeholder="Мадарра йазъе..."),
64
  outputs=gr.Audio(label="Озвучка"),
65
- title="NoxchiynAz — Чеченский синтез речи",
66
- description="Бот в Telegram: @JilmaMott_bot (работает 24/7)"
67
  )
68
 
69
- iface.launch()
 
 
8
  from telegram import Update
9
  from telegram.ext import ApplicationBuilder, ContextTypes, MessageHandler, filters
10
 
11
+ # 1. Загрузка модели
12
  model_name = "facebook/mms-tts-che"
13
  model = VitsModel.from_pretrained(model_name)
14
  tokenizer = AutoTokenizer.from_pretrained(model_name)
15
 
 
16
  def tts_chechen_logic(text):
17
  inputs = tokenizer(text.lower(), return_tensors="pt")
18
  with torch.no_grad():
19
  output = model(**inputs).waveform
20
 
 
21
  sampling_rate = model.config.sampling_rate
22
  audio_data = output.squeeze().numpy()
23
+ file_path = "voice.ogg" # OGG лучше подходит для Telegram
24
+ scipy.io.wavfile.write("temp.wav", rate=sampling_rate, data=audio_data)
25
+ # Telegram любит формат голосовых сообщений, но .wav тоже примет
26
+ return sampling_rate, audio_data, "temp.wav"
27
 
28
  # --- БЛОК TELEGRAM БОТА ---
29
+ TG_TOKEN = "8287698372:AAHjHaJVy_DajLqQhs08rNHn_22H--AUopQ"
30
 
31
  async def handle_tg_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
32
+ if not update.message or not update.message.text:
33
+ return
34
+
35
  user_text = update.message.text
36
+ print(f"Обработка для ТГ: {user_text}")
37
  try:
 
38
  _, _, file_path = tts_chechen_logic(user_text)
 
39
  with open(file_path, 'rb') as audio:
40
  await context.bot.send_voice(chat_id=update.effective_chat.id, voice=audio)
41
  except Exception as e:
42
+ print(f"Ошибка в handle_tg_message: {e}")
43
 
44
+ def run_bot_in_thread():
45
+ # Создаем новый цикл событий для этого потока
46
  loop = asyncio.new_event_loop()
47
  asyncio.set_event_loop(loop)
48
+
49
+ print("Запуск инициализации бота...")
50
  app = ApplicationBuilder().token(TG_TOKEN).build()
51
  app.add_handler(MessageHandler(filters.TEXT & (~filters.COMMAND), handle_tg_message))
52
+
53
+ # Запускаем бота
54
+ print("Бот начинает опрос (polling)...")
55
+ app.run_polling(drop_pending_updates=True)
56
 
57
+ # Запускаем поток
58
+ t = threading.Thread(target=run_bot_in_thread, daemon=True)
59
+ t.start()
60
  # --------------------------
61
 
62
+ # Интерфейс Gradio (Сайт)
63
  def gradio_interface(text):
64
  sr, audio, _ = tts_chechen_logic(text)
65
  return (sr, audio)
66
 
 
67
  iface = gr.Interface(
68
  fn=gradio_interface,
69
+ inputs=gr.Textbox(label="Введите текст на чеченском"),
70
  outputs=gr.Audio(label="Озвучка"),
71
+ title="NoxchiynAz"
 
72
  )
73
 
74
+ print("Запуск Gradio...")
75
+ iface.launch()