Discord.py modifier une permission
Résolu
Bonjour à tous,
Je code un bot python et je suis confronté à un problème... J'ai cette liste de tuples (qui contient le nom de la permission et sa valeur) :
... et je voudrais la transformer en objet
Quelqu'un peut il m'aider ?
Merci beaucoup
By MathKode
Je code un bot python et je suis confronté à un problème... J'ai cette liste de tuples (qui contient le nom de la permission et sa valeur) :
ls=[("speak", False),("ban_members", True)...]
... et je voudrais la transformer en objet
discord.Permission...
Quelqu'un peut il m'aider ?
Merci beaucoup
By MathKode
1 réponse
-
Bonjour,
D'après cette page, les permissions discord sont encodées à l'aide d'un masque, dont chaque bit correspond à une permission (1 si la permission est autorisée, 0 sinon). Par exemple :-
CREATE_INSTANT_INVITE
correspond au 1er bit de poids faible (1 << 0 == 1
). -
KICK_MEMBERS
correspond au 2e bit de poids faible (1 << 1 == 1
). -
BAN_MEMBERS
correspond au 3e bit de poids faible (1 << 2 == 2
). - ...
Donc ce que tu pourrais faire c'est définir dans ton programme python une variable par permission, puis faire le OU logique (avec|
) des permissions à activer en fonction de ta liste.
MAP_PERMISSION_VALUE = { "create_instant_invite" : 1 << 0, "kick_members" : 1 << 1, "ban_members" : 1 << 2, # ... "speak" : 1 << 21, } def make_permission(tuples): ret = 0 for (name, enabled) in tuples: value = MAP_PERMISSION_VALUE[name] if enabled: ret |= value return ret print( make_permission([ ("speak", False), ("ban_members", True) ]) ) print( make_permission([ ("speak", True), ("ban_members", True) ]) )-
Je pense qu'il y a moyen de faire plus simple, car les noms des permissions sont des noms d'arguments de mot clé:
import discord p=["ban_members"] d=dict.fromkeys(p, True) permissions = discord.Permissions(**d)
- Bonjour
Effectivement yg_be, d'après la documentation. Le code que tu proposes s'écrit plus naturellement :
import discord permissions = discord.Permissions(ban_members=True, speak=True)
Toujours d'après la documentation, tu peux également passer par ses propriétés :
import discord permissions = discord.Permissions() permissions.ban_members = True permissions.speak = True
Bonne chance
-