Загрузка данных
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()