- zarządzanie rolami
- nadawanie ról projektowych i technologicznych
- system punktów
- wrzucanie wydarzeń z AKAI-owego kalendarza Google na serwer jako wydarzenia Discord
- automatycznie tworzenie wątków na kanale informacyjnym
- Załóż serwer discord o podobnej strukturze do serwera AKAI
- Wymagane kanały (nazwy nie mają znaczenia):
cli
- kanał do tworzenia roli na kanałach przez komendyprojects
- kanał, na którym pojawiają się wiadomości o projektachtech
- kanał, na którym pojawiają się wiadomości o technologiachthread
- kanał, na którym mają się automatycznie tworzyć wątki przy każdej wiadomościranking
- kanał z rankingiem najbardziej pomocnych członków
- Wymagane role:
- Role uzyskiwane za pomoc innym, nie musi być ich dużo, byle było co wkleić w kroku 7.
- Wymagane emoji:
- Przynajmniej jedno customowe, przypisane do ilości punktów za pomoc
- Opcjonalne kanały:
log
- kanał z logami, id podawane w.env
- Wymagane kanały (nazwy nie mają znaczenia):
- Na discordzie włącz tryb developera, by umożliwić kopiowanie ID postów i emotikonów - Jak to zrobić?
- Stworzyć nową aplikację na Discord Developer Portal
- Po wejściu w aplikację na portalu dodać bota w zakładce Bot, w sekcji Privileged Gateway Intents zaznaczyć wszystkie 3 intenty.
- W zakładce OAuth2 zaznaczyć Authorization Method na In-App Authorization ustawić scope jako bot i applications.commands a w Bot Permissions ustawić Administrator
- Uzupełniamy plik
.env
.- Token zdobędziemy w zakładce Bot na portalu
DISCORD_LOG_CHANNEL
zaś to ID kanału tekstowego na naszym serwerze gdzie będą wysyłane logi
- W pliku
db.yaml
ustawiamy wartości potrzebne do działania każdej z usług (więcej w przykładowym pliku) i odpalamy program z argumentamiwipe
orazload
.
python -m venv env
- tworzymy environment w root folderze- Aktywujemy environment
source ./env/Scripts/activate
- Linux.\env\Scripts\activate.ps1
- Windows
pip install -r requirements.txt
- instalujemy dependenciespython main.py
- odpalamy bota- Opcjonalne parametry -
wipe
iload
. Odpowiednio: wipe bazy oraz nadpisanie bazy danymi zdb.yaml
(użycie:python main.py wipe load
)
docker build -t akai-discord-bot:latest .
- budujemy image zDockerfile
docker run -d --name=akai-discord-bot akai-discord-bot
- tworzymy i odpalamy w tle kontener- Działanie z kontenerem
docker stop akai-discord-bot
zatrzymuje kontenerdocker start akai-discord-bot
włącza kontener ponowniedocker exec -it akai-discord-bot bash
wbija bashem do kontenera
- Remarks
- Aplikacja jest pod path
/app/
docker rm {id kontenera sprawdzone np. docker ps}
w razie co, gdyby potrzeba kontener usunąć (nowy build i tak nadpisuje poprzedni, więc pewnie nie będzie trzeba tego używać)
- Aplikacja jest pod path
- SQLAlchemy - używany ORM
- DiscordAPI - Discord.py SDK
- Discord Developer Portal
Dane zawarte w bazie danych zawartej na repo również należy zmienić: ustawić własny id kanałów, emoty etc. Setupu trochę jest, ale jest on intuicyjny. Z głównych rzeczy: używamy natywnego loggera, orm sqlalchemy oraz discord.py SDK.
Baza danych składa się z 6 tabel, każda z kolumn ma property not null. Możemy je dodatkowo podzielić na te zarządzane przez admina i te zarządzane wyłącznie przez bota.
- Tabele admina:
- commands - mapuje "quick-response-only" komendy wpisane przez użytkownika po znaku $, do krótkich
odpowiedzi;
command
- TEXTresponse
- TEXT
- helper_ranges - określa dolne przedziały ról dla rang helpera;
bottom_threshold
- INT - PKrole_id
- INT
- settings - zawiera pary key:value do konfiguracji bota
key
- TEXT - PKvalue
- TEXT
- commands - mapuje "quick-response-only" komendy wpisane przez użytkownika po znaku $, do krótkich
odpowiedzi;
- Tabele bota:
- helper_ranking - przechowuje ilość punktów zdobytych przez każdego użytkownika;
user_id
- INT - PKpoints
- INT - default 0
- helper_rewards - mapuje reakcje pod odpowiedziami na pytania do punktów, którymi nagradzany jest
odpowiadający;
emoji_name
- TEXT - PK (trzeba tu podawać nazwy jedynie custom-owych emoji, te Discordowe są parsowane z UTF-8 znaków emotkowych)reward
- INT
- messages_to_roles - mapuje id wiadomości projektowej do roli, która została dla tego projektu utworzona;
message_id
- INT - PKrole_id
- INT
- helper_ranking - przechowuje ilość punktów zdobytych przez każdego użytkownika;
Dodatkowo możemy załadować wartości z YAML-a do bazy danych lub ją wyczyścić ustawiając odpowiednią flagę w .env
.