I've been learning java for a few months and is quite new to python. I'm currently building a simple deep learning AI bot for discord that takes a message from the user, then replies with a message from a pre-established database. I've managed to complete the AI with no issues but I'm currently encountering some problems with setting up the code for discord.
Below is my final code block responsible for receiving the message from discord and replying the user in discord.
Current Error: My code wouldn't stop from executing after sending its first message in the discord chat, causing the bot to repeatedly send messages nonstop. This is most likely caused by the while loop within the function.
while
My attempted solution: New to python, I'm not sure how I create a boolean type class variable the way you would do it in java. I attempted to use the boolean variable new_message as the conditional statement for the while loop. This variable is set to false once a reply by the bot is sent to ensure that the program does not scan the bot's own reply and cause an infinite loop. This solution didn't seem to work because I couldn't seem to figure out a way to create the new_message variable outside of the function.
new_message
Note: I can't simply remove the while loop because I need the program to terminate once the user enters the input "quit".
@client.event async def on_message(message): bot_testing = client.get_channel(0000000000) user_input = message.content new_message = True while new_message: if user_input.lower() == "quit": # type quit to stop the program print("Program Terminated") break results = model.predict([bag_of_words(user_input, words)])[0] results_index = numpy.argmax(results) # returns the greatest value's index tag = labels[results_index] print(results) print(tag) if results[results_index] > 0.9: # accuracy threshold for a database reply for tg in data["replyData"]: if tg['tag'] == tag: responses = tg['responses'] await bot_testing.send(random.choice(responses)) new_message = False else: await bot_testing.send("I'm not sure I understand. Please try again or ask a different question!") new_message = False client.run('some-bot-code')
Also, in addition to the problem above, if anyone knows how to set up a bot that only responds when the bot itself is tagged by a user, please let me know how that is done!
Thanks in advance!
Hi Jain!Is it related in any way with OutSystems?What component are you using?If not maybe the best place to put this question is in some other forum like Stack Overflow for example.
Any way, some ideas that can help you.
Your python code seems ok and will work, however depending on your business rule since you are using an while you should check if the Author is a Bot and if yes, return from the function.
Check this topic from stack overflow.
It is very similar with the problem you are having:
I believe if you use:
if message.author.bot: return
You can solve your problem.
Cheers and Regards,
RR :)
Also,
Seems to me that the on_message function will be triggered every time a message is sent.
So you should not need to use a while, because the next message from the user will also trigger this function.
Try to see if this is really the correct way of doing what you are trying.
Hi Saniya,
Based on your comments you are learning Java and new to Phython. However, doing coding in Phython, so could you please confirm what help you are looking from OutSystems community members?
Thanks & Kind Regards,
Sachin
This discussion should be made on a phyton developer forum, not on the OutSystems forum.
So I closed this discussion.