1
votes

Commande de sondage discord.py

DISCORD.PY

J'essaye de créer une commande pour un système de sondage et rencontre un problème. La commande est la suivante:

    @commands.command(pass_context = True)
    async def poll(self, ctx, question, *options: str):
        author = ctx.message.author
        server = ctx.message.server

        if not author.server_permissions.manage_messages: return await self.bot.say(DISCORD_SERVER_ERROR_MSG)

        if len(options) <= 1:
            await self.bot.say("```Error! A poll must have more than one option.```")
            return
        if len(options) > 2:
            await self.bot.say("```Error! Poll can have no more than two options.```")
            return

        if len(options) == 2 and options[0] == "yes" and options[1] == "no":
            reactions = ['👍', '👎']
        else:
            reactions = ['👍', '👎']

        description = []
        for x, option in enumerate(options):
            description += '\n {} {}'.format(reactions[x], option)

        embed = discord.Embed(title = question, color = 3553599, description = ''.join(description))

        react_message = await self.bot.say(embed = embed)

        for reaction in reactions[:len(options)]:
            await self.bot.add_reaction(react_message, reaction)

        embed.set_footer(text='Poll ID: {}'.format(react_message.id))

        await self.bot.edit_message(react_message, embed=embed)

Ma question est la suivante : comment faire pour que la question que je pose en utilisant la commande ait plus de mots. Si vous utilisez plus de mots maintenant, je les lis comme options et j'obtiens une erreur.

Ex 1 : / poll Vous êtes humain oui non (ne lisez "vous" que comme une question, et le reste sont des options.)

Ex 2 : / poll Tu es humain oui non (c'est ce que je veux)

Merci!


0 commentaires

3 Réponses :


1
votes

Lors de l'appel de la commande, mettre une chaîne entre guillemets la traitera comme un argument:

 /poll "You are human" yes no


1 commentaires

Je vois que cela fonctionne comme ça mais puis-je le faire fonctionner directement à partir de la commande?



0
votes

Tu peux faire:

@bot.command()
async def poll(ctx, *, question):
    await ctx.channel.purge(limit=1)
    message = await ctx.send(f"```New poll: \n✅ = Yes**\n**❎ = No**")
    await message.add_reaction('❎')
    await message.add_reaction('✅')

mais maintenant vous devez faire / interroger le texte de texte bonjour-tout le monde si vous voulez ne pas avoir le "-" vous devez faire:

@bot.command()
async def poll(ctx, question, option1=None, option2=None):
  if option1==None and option2==None:
    await ctx.channel.purge(limit=1)
    message = await ctx.send(f"```New poll: \n{question}```\n**✅ = Yes**\n**❎ = No**")
    await message.add_reaction('❎')
    await message.add_reaction('✅')
  elif option1==None:
    await ctx.channel.purge(limit=1)
    message = await ctx.send(f"```New poll: \n{question}```\n**✅ = {option1}**\n**❎ = No**")
    await message.add_reaction('❎')
    await message.add_reaction('✅')
  elif option2==None:
    await ctx.channel.purge(limit=1)
    message = await ctx.send(f"```New poll: \n{question}```\n**✅ = Yes**\n**❎ = {option2}**")
    await message.add_reaction('❎')
    await message.add_reaction('✅')
  else:
    await ctx.channel.purge(limit=1)
    message = await ctx.send(f"```New poll: \n{question}```\n**✅ = {option1}**\n**❎ = {option2}**")
    await message.add_reaction('❎')
    await message.add_reaction('✅')

Mais dans celui-ci, vous ne pouvez pas avoir vos propres options ...


0 commentaires

0
votes

utilisation :

@commands.command(pass_context = True)
async def poll(self, ctx, *options: str):
    ...
    question = await self.bot.wait_for('message', check=lambda message: message.author == ctx.author)
    ...

ici, "You are human" est une chaîne "yes" "no " sont deux autres chaînes.

une autre meilleure façon de le faire est:

@commands.command(pass_context = True)
async def poll(self, ctx, option1: str, option2: str, *, question):

ou, vous pouvez utiliser wait_for

/poll "You are human" yes no


0 commentaires