#python #discord.py #bots
Вопрос:
Я относительно новичок в discord.py, Я создаю бота, но с определенными командами или вещами, которые я ставлю, бот перестает отвечать на команды (когда это работало ранее), я не могу понять, как это исправить, бот включается, но не отвечает ни на одну команду
это та зона, где находится новый
import os
import discord
from discord.ext import commands
from dotenv import load_dotenv
import urllib.request
import json
import keep_alive
import time
import asyncio
import urllib
import datetime
import pymongo
import levelsys
from discord.ext.commands import Bot
from pymongo import MongoClient
client = discord.Client()
talk_channels = []
cluster = MongoClient('mongodb srv://endercraft46:<______>@enderbot.93khp.mongodb.net/myFirstDatabase?retryWrites=trueamp;w=majority')
levelling = cluster["discord"]["levelling"]
bot = Bot(command_prefix="!", intents=discord.Intents.all())
async def on_ready(self):
print(f'Conectado a {self.user}')
for i in range(len(cogs)):
print(f'En linea!')
@bot.event
async def on_ready():
print('Ready')
while 1:
urllib.request.urlopen("https://Enderbotpy.endercraft26.repl.co")
await asyncio.sleep(500)
############################LEVELSYS###################################################
@commands.Cog.listener()
async def on_message(self, message):
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'felicidades {message.author.mention}, subiste de nivel a **nivel: {lvl}**!')
@bot.command()
async def rank(self, ctx):
stats = levelling.find_one({"id" : ctx.author.id})
if stats is None:
embed = discord.Embed(description='no has enviado ningun mensaje, por lo tanto, no tienes rango')
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(tittle="{}'s level stats".format(ctx.author.name))
embed.add_field(name="Name", value=ctx.author.mention, inline=True)
embed.add_field(name="XP", value=f"{xp}/{int(200*((1/2)*lvl))}")
embed.add_field(name="Rank", value=f"{rank}/{ctx.guild.member_count}")
embed.add_field(name="Progress Bar [lvl]", value=boxes * ":blue_square:" (20-boxes) * ":white_large_square:", inline=False)
await ctx.channel.send(embed=embed)
Новая вещь, которую я добавляю, — это система уровней, но где-то она дает сбой
Ответ №1:
Ошибка в вашем on_message
событии, так как она принимает команду как обычное сообщение, чтобы исправить это, вам просто нужно добавить await self.client.process_commands(message)
в конце on_message
события
Комментарии:
1. Нет проблем, вы можете просто пометить его как проверенный ответ