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
'programing' 카테고리의 다른 글
MySQL의 server-id와 server_id의 차이 (0) | 2022.12.26 |
---|---|
apk로 컴파일하지 않고 Android 프로젝트를 라이브러리로 Import하는 방법(Android studio 1.0) (0) | 2022.12.26 |
C++ 표준 간 변환:: 벡터 및 C 어레이(복사하지 않음) (0) | 2022.12.26 |
file_get_contents("php://input") 또는 $HTTP_RAW_POST_DATA, JSON 요청 본문을 가져오려면 어떤 것이 좋습니까? (0) | 2022.12.26 |
Java에서 Selenium-WebDriver에 몇 초 동안 대기하도록 요청하려면 어떻게 해야 하나요? (0) | 2022.12.26 |