Получить аргумент из команды и сопоставить его с элементом в списке - PullRequest
0 голосов
/ 26 января 2019

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

@bot.event
async def on_message(message):
    memberName = message.author
    roleParasoul = discord.utils.get(message.server.roles, name="Parasoul")
    roleValentine = discord.utils.get(message.server.roles, name="Valentine")
    roleBand = discord.utils.get(message.server.roles, name="Big Band")
    rolePeacock = discord.utils.get(message.server.roles, name="Peacock")
    roleRobo = discord.utils.get(message.server.roles, name="Robo Fortune")
    roleFortune = discord.utils.get(message.server.roles, name="Ms. Fortune")
    roleBeowulf = discord.utils.get(message.server.roles, name="Beowulf")
    roleCerebella = discord.utils.get(message.server.roles, name="Cerebella")
    roleFilia = discord.utils.get(message.server.roles, name="Filia")
    roleFukua = discord.utils.get(message.server.roles, name="Fukua")
    roleDouble = discord.utils.get(message.server.roles, name="Double")
    roleEliza = discord.utils.get(message.server.roles, name="Eliza")
    rolePainwheel = discord.utils.get(message.server.roles, name="Painwheel")
    roleFeelme = discord.utils.get(message.server.roles, name="Feelme")
    roleSkullgirls = discord.utils.get(message.server.roles, id="343122878595727360")

# check which command we wanted (and ignore any message that isn't a command)
    if message.content.startswith('!roles'):
        botCmd = LobbyBotCommand.ROLES
    else:
        return

    if botCmd == LobbyBotCommand.ROLES:
        tagReact = bot.add_reaction(message, ":SeemsGood:263784999038353420")
        if "Feelme" in message.content:
            await bot.add_roles(memberName, roleFeelme)
            await tagReact
            return
        elif "Skullgirls" in message.content:
            await bot.add_roles(memberName, roleSkullgirls)
            await tagReact
            return

Люди уже сказали мне использовать правильный @bot.command для команд, использующих discord.py, но я хочу, чтобы сначала это работало.

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

То, что я думал, сработает, выглядело так:

@bot.event
async def on_message(message):
    roleCharacter = ("Parasoul", "Valentine", "Big Band", "Peacock", "Robo Fortune", "Ms. Fortune", "Beowulf", "Cerebella", "Filia", "Fukua", "Double", "Eliza", "Painwheel", "Feelme", "SG")
    if message.content.startswith('!roles'):
        if roleCharacter in message.content:
            await bot.add_roles(memberName, roleCharacter)
            return

Это, очевидно, не работает, потому что я могу использовать только строки в if. Что теперь?

1 Ответ

0 голосов
/ 27 января 2019

Люди уже сказали мне, используйте правильный @ bot.command для команд, использующих discord.py, но я хочу сначала сделать эту работу.

Хорошо, если вы действительно непреклонныможно использовать discord.utils.get и просматривать список имен ролей в виде строк

Может быть что-то вроде

@bot.event
async def on_message(message):
  memberName=message.author
  roleCharacter = ("Parasoul", "Valentine", "Big Band", "Peacock", "Robo Fortune", "Ms. Fortune", "Beowulf", "Cerebella", "Filia", "Fukua", "Double", "Eliza", "Painwheel", "Feelme", "SG")
  role_name = ""
  if message.content.startswith('!roles'):
    for i in roleCharacter:
      if i in message.content:
        role_name = i
        break
    await bot.add_roles(memberName,discord.utils.get(message.server.roles, name=role_name))
    return
...