Бот Discord запускает команды дважды discord.py

#python #python-3.x #discord.py #discord.py-rewrite

#python #python-3.x #discord.py #discord.py-переписать

Вопрос:

Вот основной бот и винтик, все команды во всех винтиках выполняются дважды при каждом вызове, и я знаю, что запущен только 1 экземпляр бота, и дублирующих команд нет. Я даже переключил текстовые редакторы, и несколько человек просмотрели мой код, и они не могут понять, нужна ли какая-либо помощь, спасибо.

Вызван главный бот main_Bot.py

 #imports
from cogs.database import database
import discord
import time
import random
from discord.abc import GuildChannel
from discord.embeds import Embed
from discord.ext import commands
import asyncio
import os
import json
import time
import requests
from bs4 import BeautifulSoup
from discord.ext import tasks
os.chdir(os.getcwd())




intents = discord.Intents.default()
intents.members = True 
client = commands.Bot(command_prefix="-",intents=intents)
client.remove_command("help")
client.load_extension("cogs.moderation")
client.load_extension("cogs.fun")
client.load_extension("cogs.events")
client.load_extension("cogs.eco")
client.load_extension("cogs.help")
print("loaded")




async def newServer(ctx,guild):

    role = discord.utils.get(guild.roles,name = "Muted")
   
@client.event
async def on_ready():
    #when the bot powers on
    print("Ready")
    print(discord.__version__)
    await client.change_presence(status=discord.Status.online, activity=discord.Game('Type -help'))
    clearTXT.start()
    DailyTimer.start()
    muteTime.start()




@tasks.loop(seconds=10)
async def clearTXT():
    with open("spam_detect.txt", "r ") as file:
        file.truncate(0)
@tasks.loop(seconds=60)
async def DailyTimer():
    users = await database.get_bank_data()
        
    for i in users:
            
        user = await client.fetch_user(i)
        daily_timer = users[str(user.id)]["daily_timer"]
        if daily_timer <= 0:
            users[str(user.id)]["daily"] = True
        else:
            users[str(user.id)]["daily_timer"] -= 10
@tasks.loop(seconds=60)
async def muteTime():
    users = await database.get_muted_data()
    mod_chat = client.get_channel(778671755115888670)
    print("muted Time")
    for i in users:
            print("Looped")
            user = await client.fetch_user(i)
            print(user)
            daily_timer = users[str(user.id)]["time"]
            print(daily_timer)
            if daily_timer > 0:
                users[str(i)]["time"] -= 60
                print("Munis 60")
                with open("muted_players.json", "w") as f:
                    json.dump(users,f,indent=2)  
                
                

            else:
            

                print("unmuted")
                getGuild = users[str(user.id)]["server"]
                guild = client.get_guild(getGuild)
                member = guild.get_member(user.id)
                mute_role=discord.utils.get(guild.roles, name="Muted")
                await member.remove_roles(mute_role)
            #  await deleteMuted(user)  
                with open("muted_players.json", "w") as f:
                    users.pop(str(user.id))
                    json.dump(users,f,indent=2) 
                embed = discord.Embed(description= f"✅ **{member.display_name} mute has run out and is now unmuted**", color=discord.Color.green())
                await mod_chat.send(embed=embed)


#run client server
client.run('' )
 

Один из винтиков вызвал fun.py

 import discord
import asyncio
from discord import client
from discord.ext import commands
import requests
from bs4 import BeautifulSoup
import random

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

        self.client = client
    @commands.Cog.listener()
    async def on_ready(self):
        print("Fun Cog Loaded")
    
    @commands.command(name="test")
    async def test(self,ctx):
        await ctx.send("this is a test")



    @commands.command(name="embed")
    @commands.has_permissions(manage_messages=True)
    async def embed(self,ctx,channel:discord.TextChannel,title, * ,words_embed):
        person = ctx.author.display_name
        words = words_embed
        print(words)
        em = discord.Embed(title = title, color = discord.Color.dark_red())
        em.description = words
    #  em.add_field(name=person,value=words)
    # em.set_footer(text = person)
        await channel.send(embed = em)
        await ctx.message.delete()



    @commands.command(name="message")
    @commands.has_permissions(manage_messages=True)
    async def embed(self,ctx,channel:discord.TextChannel, * words_embed):

        words = ' '.join([str(words) for words in words_embed]) 
        print(words)
        await channel.send(words)
        await ctx.message.delete()

    @commands.command(name='wiki')
    async def wikipedia(self,ctx):
        a = "https://en.wikipedia.org/wiki/Special:Random"
        u = requests.get(a)
        soup = BeautifulSoup(u.content, 'html.parser')
        title = soup.find(class_ = "firstHeading").text
        title = title.replace(" ", "_")
        url = 'https://en.wikipedia.org/wiki/%s' %title
        await ctx.send(f"""Here is your random Wikipedia article! 
    {title} - {url}""")


    @commands.command(name="flip")
    async def flip(self,ctx):
        results = random.randrange(0,2)
        print(results)
        if results == 1:
            em = discord.Embed(title = f"The coin landed on Heads!", color = discord.Color.dark_blue())
            await ctx.send(embed = em)
        elif results == 0:
            em = discord.Embed(title = f"The coin landed on Tails!", color = discord.Color.dark_blue())
            await ctx.send(embed = em)

def setup(client):
    client.add_cog(fun(client))
 

Комментарии:

1. Вы уверены, что не используете какие-либо скрытые процессы Python? Чтобы проверить, откройте диспетчер задач ( Ctrl Shift Esc )

2. Да, я уверен, что я проверил диспетчер задач, прежде чем он будет запущен только один раз, не скрытый.

3. Вы запускаете файл python с помощью IDE? Например, vscode или pycharm?

4. да, я использую VS Code.

5. Попробуйте закрыть его и все экземпляры в диспетчере задач, если это не сработает, попробуйте также перезагрузить компьютер

Ответ №1:

Этот пост на reddit предоставляет решение:

Если есть

 @commands.Cog.listener()
async def on_message(..):
 

функция в любом из других загружаемых вами расширений cogs,
удалите строку

 await self.client.process_commands(message)
 

из его тела. Это не требуется внутри файла расширения, загружаемого cogs, только в основном файле.