Message.content.split () Discord.PY - PullRequest
       18

Message.content.split () Discord.PY

0 голосов
/ 09 апреля 2019

У меня есть несколько команд, которые могут иметь более одного значения, для которого мне нужно разделить сообщение. Тогда проблема в том, что я хочу дать пользователю возможность использовать только 1 значение или до 4. Когда я использую message.content.split(" ", 4), я получаю ошибку индекса, потому что она ожидает 4 значения. Есть ли более простой способ сделать это?

          if message.content.lower().startswith('!rip'):
                x = message.content.split(" ", 4)
                riptext = x[1]
                riptext2 = x[2]
                riptext3 = x[3]
                riptext4 = x[4]
                rip = discord.Embed(color=random.randint(0x000000, 0xFFFFFF))
                rip.set_image(
                    url=f"http://www.tombstonebuilder.com/generate.php?top1={quote(riptext)}&top2={quote(riptext2)}&top3={quote(riptext3)}&top4={quote(riptext4)}&sp=")
                await client.send_message(message.channel, embed=rip)

1 Ответ

1 голос
/ 09 апреля 2019

Вы можете нарезать вывод split(), чтобы игнорировать первый элемент ('!rip'), используя:

message.content.split(" ",4)[1:]

Затем вы можете заполнить его пустыми строками, если длина меньше 4.

Обратите внимание, что нет необходимости в отдельных переменных riptext1, riptext2 и т. Д. Вы можете просто сделать riptext в списке и получить доступ, например. первый элемент с riptext[0]:

if message.content.lower().startswith('!rip'):
    # store arguments in x, excluding the first element (!rip)
    x = message.content.split(" ",4)[1:]
    # pad x with empty strings in case there are less than 4 arguments, and store the result in riptext
    riptext = x[:4] + ['']*(4 - len(x))
    print(riptext)

    rip = discord.Embed(color=random.randint(0x000000, 0xFFFFFF))
    rip.set_image(
            url=f"http://www.tombstonebuilder.com/generate.php?top1={quote(riptext[0])}&top2={quote(riptext[1])}&top3={quote(riptext[2])}&top4={quote(riptext[3])}&sp=")
    await client.send_message(message.channel, embed=rip)

Например, если message.content = '!rip 1 2',

  • x будет ['1', '2']
  • riptext будет ['1', '2', '', '']
...