Ошибка в системе уровней

Вот мой отрывок кода:

from webserver import keep_alive
import discord
import json
import sqlite3
import re
import os
from discord.ext import commands
import datetime
import random
from pymongo import MongoClient
import asyncio
import levelsys

cogs = [levelsys]

client = commands.Bot(command_prefix = "!", intents=discord.Intents.all());

bot_channel = 702341394014011425
talk_channels = [702341394014011425]

level = ["?Bronze?", "?Iron?", "?Gold?", "?Diamond?", "?Elite?"]
levelnum = [5, 10, 20, 30, 50]

cluster = MongoClient("mongodb+srv://<ss>:<*личная инфа>@cluster0.vraiu.mongodb.net/Cluster0?retryWrites=true&w=majority")

levelling = cluster["discord"]["levelling"]

class levelsys(commands.Cog):
  def __init__(self, client):
    self.client = client

  @commands.Cog.listener()
  async def on_ready(self):
    print("ready!")

  @commands.Cog.listener()
  async def on_message(self, message):
    if message.channel.id in talk_channels:
      stats = levelling.find_one({"id" : message.author.id})
      if not message.author.bot:
        if stats is None:
          newuser = {"id" : message.author.id, "xp" : 100}
          levelling.insert_one(newuser)
        else:
          xp = stats["xp"] + 5
          levelling.update_one({"id":message.author.id}, {"$set":{"xp":xp}})
          lvl = 0
          while True:
            if xp < ((50*(lvl**2))+(50*lvl)):
              break
            lvl += 1
          xp -= ((50*((lvl-1)**2))+(50*(lvl-1)))
          if xp == 0:
            await message.channel.send(f'У {message.author.mention} повысился уровень до **{lvl}**!')
            for i in range(len(level)):
              if lvl == levelnum[1]:
                await message.author.add_roles(discord.utils.get(message.author.guild.roles, name=level[1]))
                embed = discord.Embed(description=f"{message.author.mention} ты получил роль **{level[1]}**!")
                embed.set_thumbnail(url=message.author.avatar_url)
                await message.channel.send(embed=embed)

@commands.command()
async def ранг(self, ctx):
  if ctx.channel.id == bot_channel:
    stats = levelling.find_one({"id" : ctx.author.id})
    if stats is None:
      embed = discord.Embed(description="Вы не отправляли ни одного сообщения!")
      await ctx.channel.send(embed=embed)
    else:
      xp = stats["xp"]
      lvl = 0
      rank = 0
      while True:
            if xp < ((50*(lvl**2))+(50*lvl)):
              break
            lvl += 1
      xp -= ((50*((lvl-1)**2))+(50*(lvl-1)))
      boxes = int((xp/(200*((1/2) * lvl)))*20)
      rankings = levelling.find().sort("xp",-1)
      for x in rankings:
        rank += 1
        if stats["id"] == x["id"]:
          break
      embed = discord.Embed(title="{} статистика уровней".format(ctx.author.name))
      embed.add_field(name="Имя", value=ctx.author.mention, inline=True)
      embed.add_field(name="XP", value=f"{xp}/{int(200*((1/2)*lvl))}", inline=True)
      embed.add_field(name="Ранг", value=f"{rank}/{ctx.guild.member_count}", inline=True)
      embed.add_field(name="Progress Bar [lvl]", value=boxes * ":blue_square:" + (20-boxes) * ":white_large_square:", inline=False)
      embed.set_thumbnail(url=ctx.author.avatar_url)
      await ctx.channel.send(embed=embed)
  @commands.command()
  async def лидеры(self, ctx):
    if (ctx.channel.id == bot_channel):
      rankings = levelling.find().sort("xp",-1)
      i = 1
      embed = discord.Embed(title="Рейтинг участнков:")
      for x in rankings:
        try:
          temp = ctx.guild.get_member(x["id"])
          tempxp = x["xp"]
          embed.add_field(name=f"{i}: {temp.name}", value=f"Всего опыта: {tempxp}", inline=False)
          i += 1
        except:
          pass
        if i == 11:
          break
      await ctx.channel.send(embed=embed)

Ничего из системы xp и levels не работает, выдаёт ошибку при написании команды:

Ignoring exception in command None:
discord.ext.commands.errors.CommandNotFound: Command "ранг" is not found

Где может быть ошибка?


Ответы (1 шт):

Автор решения: Be3y4uu_K0T

Может Вы забыли подключить свой cog?

Используйте:

bot.add_cog(levelsys(bot))

P.S. Я вижу, что Вы используете on_message, и предупреждаю Вас сразу о такой проблеме ссылка.

→ Ссылка