J'ai besoin d'implémenter une partie de la fonctionnalité et l'une des fonctionnalités implémente une fonctionnalité de type sondages. Impossible d'utiliser les robots publics de discorde en raison de certaines politiques, nous devons donc implémenter quelque chose par moi-même. J'ai fait des recherches hier et j'ai pu créer un bot de base en utilisant python3 et commands
api depuis discord.ext
. Maintenant, ce que je dois comprendre, c'est:
ctx
je peux obtenir user
tags
(admin etc). Y a-t-il une meilleure façon de le faire?Je n'ai rien trouvé d'utile sur Page de référence des commandes ou je regarde probablement une mauvaise documentation. Toute aide serait appréciée.
merci
Mise à jour : Merci les gars. maintenant je suis coincé sur la façon d'ajouter des emoji, voici mon code
poll_emojis = {0: ':zero:', 1: ':one:', 2: ':two:', 3: ':three:', 4: ':four:'}
@client.event
async def on_message(message):
if message.author == client.user:
return
if message.content.startswith('$create_poll'):
poll_content = message.content.split('"')
poll_text = poll_content[1]
poll_options = []
poll_option_text = ''
count = 0
for poll_option in poll_content[2:]:
if poll_option.strip() != '':
poll_options.append(poll_option)
poll_option_text += '{0}: {1}\t'.format(poll_emojis[count], poll_option)
count += 1
posted_message = await message.channel.send('**{0}**\n{1}'.format(poll_text, poll_option_text))
count = 0
for poll_option in poll_options:
await posted_message.add_reaction(Emoji(poll_emojis[count]))
count += 1
En passant, étant donné que vous démarrez ce projet et que vous utilisez déjà la documentation de réécriture, assurez-vous d'utiliser la version de réécriture. Il y a quelques questions ici sur la façon de s'en assurer et comment l'obtenir si vous ne l'êtes pas, mais c'est mieux documenté et plus facile à utiliser. Mes réponses ci-dessous supposent que vous utilisez discord.py-rewrite
Message.reactions
est une liste de Reaction
s. Vous pouvez obtenir une cartographie des réactions à leurs comptes avec
{react.emoji: react.count for react in message.reactions}
Vous pouvez réagir au message immédiatement après l'avoir posté:
@bot.command()
async def poll(ctx, *, text):
message = await ctx.send(text)
for emoji in ('????', '????'):
await message.add_reaction(emoji)
Message.pin
: await message.pin()
Je ne suis pas sûr de ce que vous entendez par "user
tags
". Vous voulez dire des rôles?
Modifier 1:
J'écrirais votre commande comme
@bot.command()
async def create_poll(ctx, text, *emojis: discord.Emoji):
msg = await ctx.send(text)
for emoji in emojis:
await msg.add_reaction(emoji)
Notez que cela ne fonctionnera que pour les emoji personnalisés, ceux que vous avez ajoutés à votre propre serveur (En effet, discord.py
Traite différemment les emoji unicode et les emoji personnalisés.) Cela accepterait des commandes comme
!create_poll "Vote in the Primary!" :obamaemoji: :hillaryemoji:
en supposant que ces deux emoji se trouvaient sur le serveur sur lequel vous envoyez la commande.
Modifier 2:
Avec le nouveau convertisseur commands.Greedy
, je réécrirais la commande ci-dessus comme suit:
@bot.command()
async def create_poll(ctx, emojis: Greedy[Emoji], *, text):
msg = await ctx.send(text)
for emoji in emojis:
await msg.add_reaction(emoji)
L'invocation serait donc un peu plus naturelle, sans les guillemets:
!create_poll :obamaemoji: :hillaryemoji: Vote in the Primary!