This repository has been archived by the owner on Oct 13, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
config.py
270 lines (203 loc) · 9.86 KB
/
config.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
"""lg-rez / Variables globales
Personalisation de différents paramètres et accès global
"""
import discord
from lgrez.blocs import ready_check
#: str: Préfixe des noms des salons de conversation bot.
private_chan_prefix = "conv-bot-"
#: str: Nom de la catégorie des conversations bot, pour l'inscription
#: (sera éventuellement suivi de 2, 3... si plus de 50 joueurs).
private_chan_category_name = "CONVERSATION BOT"
#: str: Date de début de saison (pour information lors de l'inscription).
debut_saison = "32 plopembre"
#: bool: Si ``False``, le processus d'insciption ne demandera pas la
#: chambre des joueurs, qui seront tous inscrits en :attr:`chambre_mj`
#: (et la chambre ne sera pas indiquée dans ``!vivants``).
demande_chambre = True
#: str: Nom par défaut de la :attr:`~.bdd.Joueur.chambre` des joueurs.
chambre_mj = "[chambre MJ]"
#: bool: Si ``True``, le bot appellera :meth:`.LGBot.i_am_alive` toutes
#: les 60 secondes. Ce n'est pas activé par défaut.
output_liveness = False
#: str: :attr:`~.bdd.Role.slug` du rôle par défaut, attribué aux
#: joueurs lors de l'inscription (renvoyé par :meth:`.bdd.Role.default`).
#: Doit correspodre à un rôle existant (défini dans le GSheet *Rôles et
#: actions*).
default_role_slug = "nonattr"
#: str: :attr:`~.bdd.Camp.slug` du camp par défaut, attribué aux
#: joueurs lors de l'inscription (renvoyé par :meth:`.bdd.Camp.default`).
#: Doit correspodre à un camp existant (défini dans le GSheet *Rôles et
#: actions*).
default_camp_slug = "nonattr"
#: str: Nom de la feuille du *Tableau de bord* contenant l'état actuel
#: des joueurs, sur laquelle sont effectuées les modifications.
tdb_main_sheet = "Journée en cours"
#: str: Nom de la feuille du *Tableau de bord* contenant les résultats
#: des votes (après corrections manuelles éventuelles).
tdb_votes_sheet = "Journée en cours"
#: int: Numéro de la ligne de la feuille principale
#: (:attr:`~lgrez.config.tdb_main_sheet`)
#: du *Tableau de bord* contenant les noms des colonnes (commençant de 1).
tdb_header_row = 3
#: str: Nom de la colonne de la feuille principale
#: (:attr:`~lgrez.config.tdb_main_sheet`)
#: du *Tableau de bord* contenant les IDs Discord des joueurs.
tdb_id_column = "A"
#: tuple[str]: Noms de la première et de la dernière colonne de la zone de
#: la feuille principale (:attr:`~lgrez.config.tdb_main_sheet`) du *Tableau
#: de bord* contenant les informations (colonnes de la BDD) des joueurs.
tdb_main_columns = ("J", "Q")
#: tuple[str]: Noms de la première et de la dernière colonne de la zone de
#: la feuille principale (:attr:`~lgrez.config.tdb_main_sheet`) du *Tableau
#: de bord* contenant l'ancien état des informations des joueurs
#: (avant ``!sync``).
tdb_tampon_columns = ("B", "I")
#: str: Nom de l'intitulé de la colonne de la feuille des votes
#: (:attr:`~lgrez.config.tdb_votes_sheet`) du *Tableau de bord*
#: contenant les cibles des votes pour le condamné.
tdb_votecond_column = "CondamnéRéel"
#: str: Nom de l'intitulé de la colonne de la feuille des votes
#: (:attr:`~lgrez.config.tdb_votes_sheet`) du *Tableau de bord*
#: contenant les noms des votants pour le condamné.
tdb_votantcond_column = "VotantCond"
#: str: Nom de l'intitulé de la colonne de la feuille des votes
#: (:attr:`~lgrez.config.tdb_votes_sheet`) du *Tableau de bord*
#: contenant les cibles des votes pour le nouveau maire.
tdb_votemaire_column = "MaireRéel"
#: str: Nom de l'intitulé de la colonne de la feuille des votes
#: (:attr:`~lgrez.config.tdb_votes_sheet`) du *Tableau de bord*
#: contenant les noms des votants pour le nouveau maire.
tdb_votantmaire_column = "VotantMaire"
#: str: Nom de la feuille du GSheet *Données brûtes* où enregistrer
#: les votes brutes pour le condamné du jour.
db_votecond_sheet = "votecond_brut"
#: str: Nom de la feuille du GSheet *Données brûtes* où enregistrer
#: les votes brutes pour le nouveau maire.
db_votemaire_sheet = "votemaire_brut"
#: str: Nom de la feuille du GSheet *Données brûtes* où enregistrer
#: les votes brutes pour le vote des loups.
db_voteloups_sheet = "voteloups_brut"
#: str: Nom de la feuille du GSheet *Données brûtes* où enregistrer
#: les actions effectuées.
db_actions_sheet = "actions_brut"
#: list[str]: Mots-clés (en minuscule) utilisables (quelque soit la casse)
#: pour arrêter une commande en cours d'exécution.
stop_keywords = ["stop", "!stop"]
#: list[str]: Mots-clés de rechargement (dans :attr:`.bdd.BaseAction.refill`)
#: permettant de recharger une action à son nombre de charges initial.
refills_full = ["weekends"]
#: list[str]: Mots-clés de rechargement (dans :attr:`.bdd.BaseAction.refill`)
#: permettant de recharger une action de une charge.
refills_one = ["forgeron", "rebouteux", "divin"]
#: list[str]: Mots-clés de rechargement (dans :attr:`.bdd.BaseAction.refill`)
#: à utiliser par le MJ pour ajouter une charge à une action.
refills_divins = ["divin"]
class Role(ready_check.ReadyCheck, check_type=discord.Role):
"""Rôles Discord nécessaires au jeu
Cette classe dérive de :class:`.ready_check.ReadyCheck` :
accéder aux attributs ci-dessous avant que le bot ne soit connecté
au serveur lève une :exc:`~.ready_check.NotReadyError`.
Plus précisément, :meth:`.LGBot.on_ready` remplace le nom du rôle
par l'objet :class:`discord.Role` correspondant : si les noms des
rôles sur Discord ont été modifiés, indiquer leur nom ici
(``lgrez.config.Role.x = "nouveau nom"``) avant de lancer le bot,
sans quoi :meth:`.LGBot.on_ready` lèvera une erreur.
**Ne pas instancier cette classe.**
Rôles utilisés (dans l'ordre hiérarchique conseillé) :
Attributes:
mj: Maître du Jeu.
Nom par défaut : "MJ".
joueur_en_vie: Joueur vivant, pouvant parler publiquement.
Nom par défaut : "Joueur en vie".
joueur_mort: Joueur mort, ne pouvant pas parler publiquement.
Nom par défaut : "Joueur mort".
maire: Joueur élu Maire, mis en avant et pouvant utiliser @everyone.
Nom par défaut : "Maire".
redacteur: Rôle permettant à un joueur d'utiliser les commandes de
gestion d'IA (voir :class:`features.gestion_ia.GestionIA`). Mettre
le même nom que le rôle des MJs si vous voulez supprimer ce rôle.
Nom par défaut : "Rédacteur".
everyone: Rôle de base. Les joueurs dont le rôle le plus élevé
est ce rôle (ou moins) seront ignorés par le bot.
Nom par défaut: "@everyone" (rôle Discord de base)
"""
mj = "MJ"
redacteur = "Rédacteur"
joueur_en_vie = "Joueur en vie"
joueur_mort = "Joueur mort"
maire = "Maire"
everyone = "@everyone"
class Channel(ready_check.ReadyCheck, check_type=discord.TextChannel):
"""Salons Discord nécessaires au jeu
Cette classe dérive de :class:`.ready_check.ReadyCheck` : accéder
aux attributs ci-dessous avant que le bot ne soit connecté au
serveur lève une :exc:`~.ready_check.NotReadyError`.
Plus précisément, :meth:`.LGBot.on_ready` remplace le nom du rôle
par l'objet :class:`discord.TextChannel` correspondant : si les noms
des salons sur Discord ont été modifiés, indiquer leur nom ici
(``lgrez.config.Channel.x = "nouveau nom"``) avant de lancer le bot,
sans quoi :meth:`.LGBot.on_ready` lèvera une erreur.
**Ne pas instancier cette classe.**
Salons utilisés (dans l'ordre d'affichage conseillé) :
Attributes:
roles: Salon listant les rôles (catégorie Informations).
Nom par défaut : "roles".
logs: Salon pour les messages techniques (catégorie réservée aux MJs).
Nom par défaut : "logs".
annonces: Salon d'annonces (catégorie Place du village).
Nom par défaut : "annonces".
haros: Salon des haros et candidatures (catégorie Place du village).
Nom par défaut : "haros".
debats: Salon de discussion principal (catégorie Place du village).
Nom par défaut : "débats".
"""
roles = "rôles"
logs = "logs"
annonces = "annonces"
haros = "haros"
debats = "débats"
class Emoji(ready_check.ReadyCheck, check_type=discord.Emoji):
"""Emojis Discord nécessaires au jeu
Cette classe dérive de :class:`.ready_check.ReadyCheck` : accéder
aux attributs ci-dessous avant que le bot ne soit connecté au
serveur lève une :exc:`~.ready_check.NotReadyError`.
Plus précisément, :meth:`.LGBot.on_ready` remplace le nom du rôle
par l'objet :class:`discord.Emoji` correspondant : si les noms
des emojis sur Discord ont été modifiés, indiquer leur nom ici
(``lgrez.config.Emoji.x = "nouveau nom"``) avant de lancer le bot,
sans quoi :meth:`.LGBot.on_ready` lèvera une erreur.
**Ne pas instancier cette classe.**
Emojis utilisés (noms par défaut identiques aux noms des attributs) :
Attributes:
ha
ro: Accolés, forment le mot « haro »
bucher: Représente le vote pour le condamné du jour
maire: Représente le vote pour le nouveau maire
lune: Représente le vote des loups
action: Représente les actions de rôle
void: Image vide, pour séparations verticales et autres filouteries
"""
ha = "ha"
ro = "ro"
bucher = "bucher"
maire = "maire"
action = "action"
lune = "lune"
void = "void"
class _ModuleGlobals(ready_check.ReadyCheck):
"""Module-level attributes with not-None ReadyCheck
(attributes accessed by __getattr__, documented directly in config.rst)
"""
guild = None
bot = None
loop = None
engine = None
session = None
# Called when module attribute not found: try to look in _ModuleGlobals
def __getattr__(attr):
try:
return getattr(_ModuleGlobals, attr)
except AttributeError:
raise AttributeError(
f"module '{__name__}' has no attribute '{attr}'"
) from None