Указание количества людей для упоминания по выбору - PullRequest
1 голос
/ 28 мая 2020

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

В настоящее время я сделал так, чтобы упоминался один человек:

@commands.command()
async def hns(self, message):
    await message.channel.send(choice(tuple(member.mention for member in message.author.voice.channel.members if not member.bot)))
    await message.channel.send("You have been chosen to seek.")

Я пытался добавить в команду аргумент, например arg, но не уверен, где оттуда go.

Возможные решения:

Я не привык использовать аргумент сообщения, поэтому я не уверен, но, может быть, использование ctx позволит получить больше?

Есть идеи?

1 Ответ

1 голос
/ 28 мая 2020

Первым аргументом в командах, использующих декораторы, всегда являются объекты контекста, они просто называются ctx по соглашению. Это означает, что ваш message arg на самом деле является объектом контекста.

Другим возможным решением может быть перетасовка списка членов, а затем выбор их количества x, например:

@commands.command()
async def hns(self, ctx, amount: int):
    members = [m.mention for m in ctx.author.voice.channel.members if not m.bot]
    random.shuffle(members) # shuffles it in place, i.e. doesn't return the list
    selected = members[:amount]
    await ctx.send(f"{', '.join(selected)}, you've been chosen to seek!")

Команда может быть использована следующим образом:
!hns 3
Случайный выбор 3 пользователей. Это позволит избежать использования жестко запрограммированного значения, хотя вы можете сделать это таким образом, если хотите.


Ссылки:

...