Discord.py v3 (переписать) Попытка сопоставить пользовательский ввод со списком предустановленных кортежей - PullRequest
0 голосов
/ 25 декабря 2018

Работаю над ботом листа персонажа для разногласий на некоторых RP-серверах. Я нахожусь в процессе добавления области для редактирования информации о персонаже после того, как она уже была собрана.У меня есть список кортежей, предопределенных для начального цикла сбора информации, но для функции редактирования я пытаюсь заставить входные данные пользователей соответствовать одному из этих предопределенных кортежей.Я не знаю ... где именно мне нужно для этого обратиться?Мол, я вижу логику того, что я пытаюсь сделать, но мой уровень опыта в Python близок к нулю.

В данный момент я просто запускаю серию if /затем операторы, но я бы хотел, чтобы код циклически повторялся по коду сбора информации, который есть у меня, пока пользователь не сообщит боту, что он завершил редактирование, и сейчас бот должен запускаться каждый раз, когда он хочет редактировать.

@commands.command()
async def edit(self, ctx):
def check(message):
    return message.author == ctx.message.author
member = ctx.author
n = await self.config.member(member).name()
await ctx.send("Accessing Character Data for {}. . .".format(n))
await asyncio.sleep(1)
await ctx.send("1: Name \n 2: Race \n 3: Gender \n 4: Age \n 5: World of Origin \n 6: Profession/Class/Occupation \n 7: Eyes \n 8: Hair \n 9: Height \n 10: Weight \n 11: Body Mods \n 12: Description \n 13: Primary Weapon \n 14: Secondary Weapon \n 15: Magic/Tech Skill 1 \n 16: Magic/Tech Skill 2 \n 17:Magic/Tech Skill 3 \n 18: Magic/Tech Skill 4 \n 19: Magic/Tech Skill 5 \n 20: Equipped Weapon(s) \n 21: Equipped Armor \n 22: Combat Role")
i = 0
while i == 0:
    await ctx.send("Which trait would you like to edit? Please only respond with the numerical value for the selected trait.")
    try:
        input = await self.bot.wait_for('message', check=check, timeout=60)
    except asyncio.TimeoutError:
        return
    input = input.content
    ii = 0
    while ii == 0:
        if input == "1":
            info_type = ("name", "Name")
            await self.add_char_info(ctx, info_type, member)
            await ctx.send("Would you like to edit another trait?")
            try:
                msg = await self.bot.wait_for('message', check=check, timeout=60)
            except asynico.TimeoutError:
                await ctx.send("You took too long to respond. Terminating.")
                i = 1
                ii = 1
                return
            msg = msg.content.lower()
            if msg == "yes":
                ii = 0
            elif msg == "no":
                i = 1
                ii = 1
                await ctx.send("Closing Character Editor")
            else:
                await ctx.send("Please enter yes or no.")

add_char_info(ctx, info_type, member) относится к моему циклу сбора информации, который я могу опубликовать при необходимости

Поскольку у меня есть код прямо сейчас, он работает нормально, это больше просто крик дляпомогите заставить его делать то, что я на самом деле хочу, то есть конвертировать ответ пользователя x, где x - это число 1-22 в соответствии с данным меню, затем сопоставить это входное значение с соответствующим кортежем впредопределенный список кортежей.

1 Ответ

0 голосов
/ 25 декабря 2018

Вы можете рассмотреть возможность использования dictionary для хранения ваших пользовательских ответов x как keys и сохранения ваших кортежей как values, в котором вы хотели бы действовать, когда ответ пользователя соответствует ключу словаря.

Как использовать словари в Python - хорошая отправная точка

...