programing

Disconsid Py를 사용하는 Python3 및 MariaDB

newsource 2022. 12. 26. 20:29

Disconsid Py를 사용하는 Python3 및 MariaDB

사용자 입력에서 데이터를 데이터베이스에 삽입하는 봇을 프로그래밍했는데 잘 작동합니다.그러나 데이터베이스가 동일한 문자열을 여러 개 반환하고 봇이 첫 번째 문자열을 사용하는 경우가 있습니다.사용자가 첫 번째 선택만 사용하는 봇이 아니라 올바른 옵션을 선택할 수 있도록 하기 위한 최선의 방법은 무엇일까요?

자세한 설명을 위해 편집:

cursor.execute("SELECT name FROM forts WHERE name LIKE '" + str(arg) + "%';")
gym_title = str(cursor.fetchall())

스타벅스처럼 같은 제품이 여러 개 나올 수 있습니다.변경하지 않고 불협화음 봇이 각각 응답하고 사용자가 올바른 옵션을 선택할 수 있도록 할 수 있을까 생각했습니다.

이것은 실제로 들리는 것보다 더 까다롭습니다.discord.py의 이벤트 기반 모델.이 명령어는 쿼리에 대한 일부 인수를 수락하고 사용자에게 선택 항목의 목록을 반환합니다.우리는 그 사용자와 그 목록을 사전에 저장합니다.그러면 저희 회사에서는on_message이벤트에서는 각 메시지를 관심 있는 작성자의 지시와 비교하여 확인하고, 그들이 올바른 선택을 할 때까지 목록에서 메시지를 선택으로 해석하려고 합니다.

waiting_for = {}

@bot.command(pass_context=True)
async def fort(ctx, arg):
    # database setup stuff
    names = cursor.execute("SELECT name FROM forts WHERE name LIKE '" + str(arg) + "%';")
    if not names:
        await bot.say("That fort does not exist")
    elif len(names) == 1:
        await process_fort(name)
    else:
        choices = "\n".join("{}. {}".format(i, x) for i, x in enumerate(names, start=1))
        await bot.say("Your choices are")
        await bot.say(choices)
        waiting_for[ctx.message.author.id] = names


@bot.event
async def on_message(message):
    id = message.author.id
    if id in waiting_for:
        if message.content.isdigit():
            names = waiting_for[id]
            selection = int(message.content)
            if 0 < selection < len(names):
                del waiting_for[id]
                await process_fort(name)
                return
    await bot.process_commands(message)

# Whatever you want to do with the name once you have it
async def process_fort(name):
    ...

이것이 복잡하다고 생각될 경우,가 하나의 결과만 반환하는 쿼리를 입력할 때까지 모든 가능성을 사용자에게 에코할 수도 있습니다.

언급URL : https://stackoverflow.com/questions/51105122/python3-and-mariadb-using-discord-py