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) 

This is described here:


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!") 
3

I 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.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy