Загрузка данных


import os
import sys
import telebot
import pygame

# Вставьте сюда токен вашего бота от @BotFather
TOKEN = 'ВАШ_ТОКЕН_БОТА'
bot = telebot.TeleBot(TOKEN)

# Инициализация аудиомодуля
pygame.mixer.init()

# Создаем папку для звуков рядом со скриптом, если её нет
SOUNDS_DIR = 'sounds'
if not os.path.exists(SOUNDS_DIR):
  os.makedirs(SOUNDS_DIR)


@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
  help_text = (
      '🤖 **Панель управления ПК**\n\n'
      '📁 **Как добавить свой звук:**\n'
      'Просто отправьте аудиофайл (`.mp3` или `.wav`) в этот чат — он'
      ' автоматически сохранится на ПК!\n\n'
      '📋 **Команды:**\n'
      '/list — посмотреть список всех звуков\n'
      '/play `имя_файла` — включить конкретный звук\n'
      '/stop — остановить воспроизведение\n'
      '/exit — выключить этот скрипт на ПК'
  )
  bot.reply_to(message, help_text, parse_mode='Markdown')


@bot.message_handler(commands=['list'])
def list_sounds(message):
  files = os.listdir(SOUNDS_DIR)
  if not files:
    bot.reply_to(
        message,
        '📁 Папка `sounds` пуста. Сюда можно скинуть аудиофайлы прямо через чат!',
        parse_mode='Markdown',
    )
    return

  text = '🎵 **Доступные звуки на ПК:**\n\n'
  for f in files:
    text += f'• `{f}`\n'
  text += (
      '\nДля запуска отправьте:\n`/play имя_файла.mp3` (например: `/play'
      ' scream.mp3`)'
  )
  bot.reply_to(message, text, parse_mode='Markdown')


@bot.message_handler(commands=['play'])
def play_sound(message):
  parts = message.text.split(maxsplit=1)
  if len(parts) < 2:
    bot.reply_to(
        message,
        '⚠️ Укажите имя файла! Пример: `/play sound.mp3` (посмотреть список:'
        ' /list)',
        parse_mode='Markdown',
    )
    return

  filename = parts[1].strip()
  filepath = os.path.join(SOUNDS_DIR, filename)

  if not os.path.exists(filepath):
    bot.reply_to(
        message,
        f'❌ Файл `{filename}` не найден. Проверьте название через команду'
        ' /list',
        parse_mode='Markdown',
    )
    return

  try:
    pygame.mixer.music.load(filepath)
    pygame.mixer.music.play()
    bot.reply_to(message, f'▶️ Играет: `{filename}`')
  except Exception as e:
    bot.reply_to(message, f'❌ Ошибка воспроизведения: {e}')


@bot.message_handler(commands=['stop'])
def stop_sound(message):
  try:
    pygame.mixer.music.stop()
    bot.reply_to(message, '⏹ Звук остановлен.')
  except Exception as e:
    bot.reply_to(message, f'❌ Ошибка: {e}')


# Автоматическое сохранение новых звуков, отправленных в чат боту
@bot.message_handler(content_types=['audio', 'document', 'voice'])
def save_audio(message):
  try:
    file_info = None
    file_name = ''

    if message.audio:
      file_info = bot.get_file(message.audio.file_id)
      file_name = message.audio.file_name or 'audio.mp3'
    elif message.document:
      if not message.document.file_name.lower().endswith(('.mp3', '.wav')):
        bot.reply_to(
            message,
            '⚠️ Принимаются только файлы форматов `.mp3` или `.wav`!',
            parse_mode='Markdown',
        )
        return
      file_info = bot.get_file(message.document.file_id)
      file_name = message.document.file_name
    elif message.voice:
      file_info = bot.get_file(message.voice.file_id)
      file_name = f'voice_{message.message_id}.ogg'

    downloaded_file = bot.download_file(file_info.file_path)
    filepath = os.path.join(SOUNDS_DIR, file_name)

    with open(filepath, 'wb') as new_file:
      new_file.write(downloaded_file)

    bot.reply_to(
        message,
        f'✅ Файл `{file_name}` успешно добавлен! Теперь его можно запустить'
        ' командой `/play ' + file_name + '`',
        parse_mode='Markdown',
    )
  except Exception as e:
    bot.reply_to(message, f'❌ Ошибка при сохранении: {e}')


@bot.message_handler(commands=['exit'])
def exit_script(message):
  bot.reply_to(
      message, '🛑 Скрипт завершил работу. Управление с телефона отключено.'
  )
  pygame.mixer.quit()
  sys.exit()


if __name__ == '__main__':
  print('Бот запущен и готов к работе...')
  bot.infinity_polling()