My Discord bot has a start command where I check if a user is already inside my database and if not (running start command for the first time) I want to add this user to my database.
Here is the idea I tried:
client = commands.Bot(command_prefix = '/')
# define commands
@client.command()
async def start(ctx):
await start_command(ctx)
async def start_command(ctx):
user_id : int = ctx.message.author.id
result : int = does_user_exist(user_id) # returns 0 if no entry in database
if (result == 0):
print('Create user')
create_user(user_id)
await start_command(ctx)
else:
welcome_message = 'Welcome!'
await ctx.send(welcome_message)
My idea here was to check if the user is already registered (=entry in my database). If he is, message gets send. To avoid running /start twice I tried using a recursion.
My issue is in the case if the user does not exist already. The user gets created with create_user(user_id), but the recursion does not work as expected by me. I need to run /start a second time in this case before my message gets send by the bot.
(this is why I know that the user was created, otherwise running /start a second time wouldn't display my message
How would I achieve my goal using a recursion?
CodePudding user response:
Don't use recursion to implement a loop, period.
async def start_command(ctx):
user_id : int = ctx.message.author.id
while True:
result : int = does_user_exist(user_id)
if result != 0:
break
print('Create user')
create_user(user_id)
welcome_message = 'Welcome!'
await ctx.send(welcome_message)
Depending on how reliable create_user is, you won't need a loop at all.
async def start_command(ctx):
user_id : int = ctx.message.author.id
result : int = does_user_exist(user_id)
if result == 0:
print('Create user')
create_user(user_id)
welcome_message = 'Welcome!'
await ctx.send(welcome_message)
