Бот-рандомайзер с input для Discord, вывод нескольких значений со списка и исключение их
Создал простенького бота, выводящего командой "/roll" 2 случайных языка из готового списка. Суть в чем:
- Мне необходимо, чтобы я мог несколько раз дублировать эту команду в одном сообщении бота, и чтобы каждый раз был случайный результат, не имеющий значений с предыдущего. Прим.: /roll 2 # 2 - кол-во выполнений команды --> ['Английский', 'Русский'] ['Бразильский', 'Китайский']
- Было бы неплохо исключить какое-то количество языков, написав в той же команде их название. Допустим, я пишу "Английский, Японский" (/roll n Английский Японский), и они не выдаются мне, как результат.
Код:
import discord
import random
from discord.ext import commands
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix='/', intents=intents)
lan_list = ['Японский', 'Английский', 'Арабский', 'Русский', 'Французский',
'Бразильский', 'Немецкий', 'Китайский']
k = 2
@bot.command()
async def roll(ctx):
randoms = (random.SystemRandom().sample(lan_list, k))
await ctx.send(randoms)
Ответы (1 шт):
Автор решения: mrBars1k
→ Ссылка
Мой вариант решения:
@bot.command()
async def roll(ctx, *args):
ar = ' '.join(args)
ar2 = [ar][0].split(' ')
lan_list = ['Японский', 'Английский', 'Арабский', 'Русский', 'Французский', 'Бразильский', 'Немецкий', 'Китайский']
for i in ar2:
i.capitalize()
if i in lan_list:
lan_list.remove(i)
k = 2
x = int(ar2[0])
for i in range(x):
randoms = (random.SystemRandom().sample(lan_list, k))
arguments = ', '.join(randoms)
await ctx.send(arguments)
for i in randoms:
if i in lan_list:
lan_list.remove(i)
Пользователь вводит сколько раз нужно прогнать команду (количество итераций цикла) и через пробел указывает языки, которые нужно убрать, затем циклом выполняем отправку команды. Во вложенном цикле сопоставляем выпавшие в рандоме значения с теми, которые имеются в основном списке и, при совпадениях, удаляем.
Таким образом, при следующей отправке пары языков, повторов не будет.
Команда выглядит подобным видом: !roll 2 Немецкий Русский Английский