Как распечатать слово из списка при выполнении команды бота - PullRequest
0 голосов
/ 29 мая 2020

Итак, у меня есть список некоторых cars ниже, и когда я набираю !car, бот должен иметь возможность отправить только одно слово из списка, но во встроенном сообщении. Поэтому каждый раз, когда я набираю эту команду, бот отправляет одно слово, пока не достигнет конца списка (в порядке возрастания).

Пример:

Список автомобилей: BMW, Mercedes, Porsche, Honda, Pontia c

Пользователь: ! car

Бот: BMW

Пользователь: ! Car

Бот: Mercedes

Et c ...

Вот мой код: Как я могу изменить его для выполнения моего запроса?

import discord

client = discord.Client()

@client.event
async def on_message(message):

    cars = ['BMW', 'Mercedes', 'Porsche', 'Honda', 'Pontiac']

    if message.content == '!car'
        embed = discord.Embed(title=cars, description=None, color=0xfffb00)  
        # It prints the whole list, I would like only one word from the list.
        await message.channel.send(content=None, embed=embed)

client.run('token')

Любая помощь приветствуется

Ответы [ 3 ]

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

Используя длину списка, вы можете отслеживать, сколько запросов было выполнено, и использовать это число для индексации в вашем списке. Поскольку список - это stati c, я бы переместил его за пределы вашей функции и использовал бы его так:

import discord

client = discord.Client()
cars = ['BMW', 'Mercedes', 'Porsche', 'Honda', 'Pontiac']
num_cars = len(cars)
num_cars_requested = 0

@client.event
async def on_message(message):

    if message.content == '!car'
        embed = discord.Embed(title=cars[num_cars_requested % num_cars], description=None, color=0xfffb00)
        num_cars_requested += 1
        # It prints the whole list, I would like only one word from the list.
        await message.channel.send(content=None, embed=embed)

Итак, теперь ваш заголовок - это один элемент из списка, и он будет вращаться по списку путем индексации с использованием количества запросов по модулю длины списка, который будет между 0 и длиной списка минус 1 - идеально для индексирования. И num_cars_requested += 1 будет увеличиваться, чтобы получить следующее значение при следующем запросе.

Счастливого кодирования (и счастливой пятницы)!

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

Попробуйте использовать индексный подход. Это будет работать для списка любого размера> 0.

import discord

client = discord.Client()

i = 0
@client.event
async def on_message(message):
    global i # omitting this breaks the code! be careful!

    cars = ['BMW', 'Mercedes', 'Porsche', 'Honda', 'Pontiac']

    if message.content == '!car'
        car = cars[i]
        i += 1
        i = 0 if i == len(cars) else i
        embed = discord.Embed(title=car, description=None, color=0xfffb00)  
        await message.channel.send(embed=embed)

client.run('token')
0 голосов
/ 29 мая 2020

Я не знаю, как работает Discord, но если вы хотите случайным образом выбрать элемент из списка, вы можете использовать random.choice ()

import random
cars = ['BMW', 'Mercedes', 'Porsche', 'Honda', 'Pontiac']

print(random.choice(cars))

Это даст вам случайное имя автомобиля из список каждый раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...