Как заставить бот подсчитать реакцию на него и пометить всех, кто отреагировал после ввода суммы? - PullRequest
0 голосов
/ 13 июня 2019

По сути, я хочу, чтобы мой бот делал пост с пользовательской командой, заданной минимумом, реагировал на свой пост с помощью ?, и как только минимальное количество реагирует с with, он отправлял новое сообщение, помечающее человека, которыйсделал команду и всех остальных, кто отреагировал.

Я пробовал много вещей через поиск в Google и тому подобное, и это нелегко понять из-за того, что многое переписали.Я не знаком с Python, поэтому простой просмотр документации не сильно помог, и я знаю, что если бы я узнал много основ и основ Python, я бы, наверное, понял, но я хочу сделать только этого бота.

<code>#imports
import discord
import sys
from discord.ext import commands    
bot = commands.Bot(command_prefix = '.') 
annChan = 3333#fake chan num
TOKEN = 3333#fake token
people = []
minPeople = 1
chan = None

@bot.event
async def on_ready():
    global chan
    chan = bot.get_channel(annChan)
    print('Bot is ready.')

@bot.command()
async def test(ctx, arg1, arg2, arg3):
    people.append(ctx.message.author.id) 
    global minPeople
    minPeople = arg2
    msg = await chan.send('<@{}> is looking to go to '.format(ctx.message.author.id)
        + arg1
        + ' and is hoping for '
        + arg2
        + ' other person(s) to come.\nWhen: '
        + arg3
        +'\nReact with :thumbsup: if you\'re interested! @everyone')
    await msg.add_reaction('?')

bot.run('TOKEN')

Пока у меня есть только бот, который отправляет сообщение с заданными параметрами и реагирует на его собственное сообщение с помощью ?.

Я не могувыясните, как проверить, достигает ли ? суммы, указанной в аргументе 'arg2', а затем, после этого, пометить создателя сообщения и всех людей, которые отреагировали на это сообщение, сообщив им, что достигнут минимальный уровень.

Я видел, как люди говорят, что они используют response.count, но я не могу понять, как это сделать, и при этом я не знаю, как захватить всех, кто отреагировал, чтобы пометить их позже.

Оценителюбой желающий не торопится, чтобы помочь мне понять и заставить это работать.

1 Ответ

0 голосов
/ 13 июня 2019

Вот команда, которая проверяет после каждой реакции правильное количество людей, которые ответили до сих пор. Вы также должны дать своим аргументам настоящие имена вместо arg1, arg2. Трудно сказать, какими значениями должны быть эти аргументы:

thumbs_up = "\N{THUMBS UP SIGN}"

def check_count_reaction(emoji, desired_count, message):
    def predicate(reaction, user):
        return reaction.message == message and reaction.emoji == emoji and reaction.count>=desired_count
    return predicate

@bot.command()
async def test(ctx, destination, number: int, condition):
    msg = await ctx.send(f"{ctx.author.mention} is looking to go to {destination} and " 
                    "is looking for {number} other people to come.\n"
                    "When:\n {condition}\nReact with {thumbs_up} if you're interested! "
    await msg.add_reaction(thumbs_up)
                    "{ctx.guild.default_role.mention}")
    reaction, user = await bot.wait_for('reaction_add', check=check_count_reaction(thumbs_up, number+1, msg))
    users = await reaction.users().flatten()
    users = [u for u in users if not u.bot]
    await ctx.send(f"{ctx.author.mention}, {', '.join(m.mention for m in users)} are coming with you!")
...