I've been trying to convert my commands to on_message events as in this case, it saves up space and it is cleaner to look at. However I can't seem to use @cooldown() anymore as I have to use commands.Cog.listener()
Is there any other way to get a cooldown working? My code is listed below
# Cog on_message for waifus and husbandos
@commands.Cog.listener()
# Cooldown NOT WORKING
@cooldown(1, 1, BucketType.user)
async def on_message(self, message):
# Defining the channel and global variables
global waifu_split_msg
global husbando_split_msg
channel = message.channel
# Defining the message content in lowercase
user_msg = message.content.lower()
# Defining array for the list of waifus/husbando's available
waifu_array = ["toga", "yumeko"]
husbando_array = ["husk", "kakashi", "tamaki"]
# If the channel that the command has been sent is in the list of accepted channels
if str(channel) in settings.channels:
# Surround with try/except to catch any exceptions that may occur
try:
# Makes sure that the user wants a random image of a waifu
if 'w random' in user_msg:
# Get embed from randomWaifu() and send it to the channel
embed = randomWaifu(message, waifu_array)
await channel.send(embed=embed)
# Makes sure that the user wants a specific image of a waifu
elif user_msg.startswith('~w'):
# Define who the waifu is using string splitting
waifu_split_msg = user_msg.split("w ", 1)
w_array = str(waifu_split_msg[-1]).lower()
# Retrieve the image of the waifu that the user has specified
with open(f'images/AnimeImages/Waifus/{w_array}.txt') as file:
images_array = file.readlines()
# Get the full name of the waifu
full_name = Abbrev(w_array)
# Get the embed from a displayAnimeImage() and send it to the channel
embed = displayAnimeImage(images_array, message, full_name)
await channel.send(embed=embed)
except FileNotFoundError as e:
print(e)
# Throw error message saying no waifu's could be found
await channel.send(f"Sorry! That Waifu doesn't exist!! Try the Waifu's listed below!")
# Send list of suitable waifu's to the channel
nice = string.capwords(', '.join(map(str, waifu_array)))
await channel.send(nice)
# Surround with try/except to catch any exceptions that may occur
try:
# Makes sure that the user wants a random image of a husbando
if 'h random' in user_msg:
# Get embed from randomHusbando() and send it to the channel
embed = randomHusbando(message, husbando_array)
await channel.send(embed=embed)
# Makes sure that the user wants a specific image of a husbando
elif user_msg.startswith('~h'):
# Define who the husbando is using string splitting
husbando_split_msg = user_msg.split("h ", 1)
h_array = str(husbando_split_msg[-1]).lower()
# Retrieve the image of the Husbando that the user has specified
with open(f'images/AnimeImages/Husbandos/{h_array}.txt') as file:
images_array = file.readlines()
# Get the full name of the husbando
full_name = Abbrev(h_array)
# Get the embed from a displayAnimeImage() and send it to the channel
embed = displayAnimeImage(images_array, message, full_name)
await channel.send(embed=embed)
except FileNotFoundError as e:
print(e)
# Throw error message saying no husbando's could be found
await channel.send(f"Sorry! That Husbando doesn't exist!! Try the Husbando's listed below!")
# Send list of suitable Husbando's to the channel
nice = string.capwords(', '.join(map(str, husbando_array)))
await channel.send(nice)
# if the message is outwith the enso-chan-commands
else:
# Makes sure that the user only typed ~w or ~h
if user_msg.endswith('~w') or user_msg.endswith('~h'):
# Send error message
message = await channel.send(error_function())
# Let the user read the message for 2.5 seconds
await asyncio.sleep(2.5)
# Delete the message
await message.delete()
The code works perfectly besides the fact that the cooldown() at the top does not have an effect on the event whatsoever
Can anyone help me come up with another solution to this?
You can limit the amount of times an event is used by using a time parameter or a count parameter. You won't be able to do it per user very easily. If you're wanting a cooldown per user, I would highly recommend switching back to a command approach. This may help. How can I limit the on_message replies (Discord Python bot)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.