Забавни команди за същия Discord бот
main.py остава непроменен. run_club.py импортира същите Discord клиент,
дърво с команди и FastAPI приложение и добавя командите от club_fun.py.
Съществуващият панел, базата със сбирки и /сбирки продължават да работят.
Използва се един процес и същият DISCORD_TOKEN — не е нужен втори бот.
Админ панел: реплики, настройки и история
След вход в съществуващия панел натисни „Забавни команди и история“.
Ако панелът ти е на /itc-notif/, новият раздел е на /itc-notif/fun/.
Използва същата парола и админ сесия; няма отделен вход. Оттам можеш да:
- Добавяш, редактираш, временно изключваш и изтриваш реплики за псувни/закачки и телефонни пародии.
- Избираш български или английски глас за всяка реплика.
- Включваш/изключваш забавните и гласовите команди, да разрешаваш
@everyone, да задаваш разрешени канали и паузи между командите. - Преглеждаш история с дата, подател, адресат, текстов/гласов канал, точна реплика и резултат — успешна, отказана, грешка, спряна, изпълнява се или прекъсната при рестарт. Има търсене по човек/ID/реплика, филтри по команда и резултат и страници по 50 записа.
Натисни „Запази“ за съответната реплика или настройките. Промените важат за
следващите команди без рестарт; започналата реплика запазва избрания текст.
Изключването на командите не спира текущ звук — за него използвай /stop.
Ако изключиш всички реплики в категория, ботът съобщава, че няма активни реплики.
Историята започва да се събира след пускането на тази версия; стари команди не могат
да се възстановят. Редактиране или изтриване на реплика не променя старите записи.
Данните се пазят в club_fun.db до notifications.db. Файлът се създава автоматично,
не се качва в GitHub и остава след рестарт. Архивирай и двата файла при преместване
на сървъра, най-лесно при спряна услуга. Историята не се изтрива автоматично и съдържа
имена и Discord ID-та; достъпна е само след вход. Не се записва звук от участниците.
Репликите по подразбиране и .env настройките се копират само при първото пускане.
След това управлявай запазените стойности от панела — промяна в .env не заменя
вече запазените настройки. main.py не се редактира: навигацията се добавя в паметта
от отделния модул club_admin.py.
Пускане на Debian
Влез в директорията на проекта, след като промените са изтеглени от GitHub. Използвай Python 3.10 или по-нов (Debian 13 е подходящ).
sudo apt update
sudo apt install ffmpeg espeak-ng python3-venvАко вече имаш venv, използвай него. Ако нямаш: python3 -m venv venv.
source venv/bin/activate
python -m pip install -r requirements-club.txtЗапази съществуващия .env, включително DISCORD_TOKEN, CHANNEL_ID,
PANEL_PASSWORD и настройките на панела. Не публикувай токена в GitHub.
Спри стария процес преди старта. После стартирай:
python run_club.pyНе пускай едновременно python main.py и python run_club.py: това би създало
два клиента със същия токен и конфликт на порт 8000. Новият стартер обслужва и
панела на 127.0.0.1:8000; Apache конфигурацията не се променя.
При systemd запази съществуващите WorkingDirectory, User, EnvironmentFile и
останалите настройки. Смени само последния файл в ExecStart от main.py на
run_club.py. След това изпълни sudo systemctl daemon-reload и рестартирай
съществуващата си услуга с sudo systemctl restart ИМЕТО-НА-УСЛУГАТА.
Ако ползваш Uvicorn CLI, целта е run_club:app, само с един worker и без reload.
Команди
| Команда | Действие |
|---|---|
/psuvai |
Случайна шеговита псувня и таг на подателя. |
/psuvai member:@човек |
Тагва само избрания човек. |
/psuvai everyone:true |
Тагва всички, ако изрично е разрешено и подателят е администратор. |
/voice_psuvai |
Влиза в твоя гласов канал, казва реплика на български и излиза. |
/scammer |
Влиза при теб и пуска кратко пародийно обаждане на английски с телефонен ефект. |
/stop |
Спира текущата реплика/подготовка и изкарва бота. Достъпна за всеки член. |
/сбирки |
Съществуващата команда остава. |
Изборът на човек и everyone:true не могат да се комбинират.
Текстовите команди имат общ лимит за сървъра от 15 сек., voice — 30 сек.,
а @everyone — 5 минути. Няма автоматично следене или говорене при влизане на
ученик: ботът влиза и говори само след гласова команда. Не записва и не слуша хората.
/stop няма изчакване и може да се използва от всеки текстов канал.
Настройки по желание
Добави в съществуващия .env (не го заменяй):
# 0 = изключено; 1 = разрешено само за администратори
FUN_ALLOW_EVERYONE=0
# Празно = всички текстови канали; иначе реални ID-та, разделени със запетая
FUN_TEXT_CHANNEL_IDS=
# Празно = всички обикновени voice канали; иначе реални ID-та със запетая
FUN_VOICE_CHANNEL_IDS=За желаното масово тагване включи „Разреши @everyone“ от панела и запази.
FUN_ALLOW_EVERYONE=1 задава началната стойност само преди първото пускане.
Дай на бота Mention @everyone, @here, and All Roles само в избрания канал.
Кодът проверява и правата на подателя, и правата на бота; не тагва роли.
Копираш ID-та чрез Discord → Settings → Advanced → Developer Mode → десен клик → Copy ID.
Права и slash команди
В текстовия канал ботът трябва да вижда канала и да изпраща съобщения. В гласовия канал са нужни View Channel, Connect и Speak; за хората — Use Application Commands. Не е нужно да даваш Administrator на бота или да включваш Message Content Intent. Stage каналите не се поддържат.
Сегашният main.py синхронизира всички команди в сървъра, към който принадлежи
CHANNEL_ID. След рестарт логът трябва да показва 5 синхронизирани slash команди.
Ако не се показват, провери CHANNEL_ID, правата и поканата със scopes bot и
applications.commands. Това разширение следва съществуващия модел за един сървър.
Глас и реплики
Гласът се генерира локално с eSpeak NG, без платен API или изпращане на текст към
външен TTS доставчик. Той е синтетичен/роботизиран, не естествен актьорски глас.
Началните български реплики са в ROASTS, а английските пародии — в SCAMMER_LINES в
club_fun.py. След първото пускане добавяй и редактирай репликите от админ панела.
Персонажът е измислен комедиен техник-хакер; няма имитация на конкретна националност,
реално събиране на данни, пароли или плащания.
Има максимум 35 секунди звук, умерена сила, една реплика наведнъж за сървъра, автоматично излизане и почистване на временните аудиофайлове. При грешка отговорът е видим само за извикалия командата; техническите подробности са в лога. Използвай кратки реплики — по-дългите се отрязват на 35-ата секунда.
Проверка и връщане назад
python -m pip install -r requirements-test.txt
python -m pytest -qТестовете проверяват интеграцията, ограниченията на споменаванията, жизнения цикъл
на voice, запазването на реплики и история, защитата на админ API и точността на ID-тата.
Използват имитация на Discord, временни бази и фиктивни тестови настройки; не се
свързват с реален сървър и не използват истински токен.
След пускане провери /сбирки, панела, /psuvai, /voice_psuvai, /scammer и /stop
в тестов канал. Реалната връзка и чуваемият звук изискват тази проверка в Discord.
За връщане назад спри новия процес и върни стартирането на main.py. При първия
успешен slash sync ще остане само /сбирки; базата със сбирките не се променя от разширението.