- 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_CHANNELzaś to ID kanału tekstowego na naszym serwerze gdzie będą wysyłane logi
- W pliku
db.yamlustawiamy wartości potrzebne do działania każdej z usług (więcej w przykładowym pliku) i odpalamy program z argumentamiwipeorazload.
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 -
wipeiload. 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 zDockerfiledocker run -d --name=akai-discord-bot akai-discord-bot- tworzymy i odpalamy w tle kontener- Działanie z kontenerem
docker stop akai-discord-botzatrzymuje kontenerdocker start akai-discord-botwłącza kontener ponowniedocker exec -it akai-discord-bot bashwbija 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.