I'm currently working on a discord bot and I'm trying to send a message to a specific channel using Discord.py rewrite once the user levels up, and I'm getting this error:
await channel.message.send(f"{message.author.mention} is now level {self.users[author_id]['level']}! congrats!") AttributeError: 'NoneType' object has no attribute 'message' Here is all the code:
import discord from discord.ext import commands import json import asyncio class Levels(commands.Cog): @commands.Cog.listener() async def on_message(self, message): if message.author == self.bot.user: return author_id = str(message.author.id) bot = commands.Bot(command_prefix='!') if author_id not in self.users: self.users[author_id] = {} self.users[author_id]['level'] = 1 self.users[author_id]['exp'] = 0 self.users[author_id]['exp'] += 1 if author_id in self.users: if self.lvl_up(author_id): channel = bot.get_channel('636399538650742795') await channel.message.send(f"{message.author.mention} is now level {self.users[author_id]['level']}! congrats!") def __init__(self, bot): self.bot = bot with open(r"cogs\userdata.json", 'r') as f: self.users = json.load(f) self.bot.loop.create_task(self.save_users()) async def save_users(self): await self.bot.wait_until_ready() while not self.bot.is_closed(): with open(r"cogs\userdata.json", 'w') as f: json.dump(self.users, f, indent=4) await asyncio.sleep(5) def lvl_up(self, author_id): author_id = str(author_id) current_xp = self.users[author_id]['exp'] current_lvl = self.users[author_id]['level'] if current_xp >= ((3 * (current_lvl ** 2)) / .5): self.users[author_id]['level'] += 1 return True else: return False I'm really not sure what the issue is here but if anyone knows the problem I would be very appreciative if you could let me know how I can correct this.
Thanks for reading I've been trying to figure this out for hours.
Edit: Still having the issue.
4 Answers
You get AttributeError because channel is None.
To fix it you need to remove quotes from channel id like this:
channel = bot.get_channel(636399538650742795) Also i see another error on the next line. The channel has no message attribute too. I think you need to fix it like this:
await channel.send(f"{message.author.mention} is now level {self.users[author_id]['level']}! congrats!") 3I was able to send messages using this guide: the code I used is:
channel = client.get_channel(12324234183172) await channel.send('hello') @bot.command() async def lvl_up(member: discord.Member): """Send a level up message""" channel = bot.get_channel(channel_id) # channel id should be an int if not channel: return await channel.send(f"GG {member}, u lvled up") # Whatever msg u want to put Try using that code for the channel and sending the message, then add ur logic. I'm new to Stack Overflow so idk if I formatted that code correctly
Not sure if this is solved (sorry I'm new to stack overflow) but using this made it work
@bot.command() async def Hello(ctx): channel = bot.get_channel(Insert Channel ID) await channel.send('Hello') Using this I didn't get the NoneType error.