Как реализовать команду изменения префикса с помощью винтиков?

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

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

Вопрос:

Прежде всего, это мои каталоги ботов.

введите описание изображения здесь

теперь вот как выглядят все события и команды для облегчения изменения префикса.

 def get_prefix(client, message):
    with open("./prefixes_data.json", "r") as f:
        prefixes = json.load(f)

    return prefixes[str(message.guild.id)]

client = commands.Bot(command_prefix = get_prefix)

@client.event
async def on_ready():
    print('bot ready hai')

@client.event
async def on_guild_join(guild):
    with open("./prefixes_data.json", "r") as f:
        prefixes = json.load(f)
    
    prefixes[str(guild.id)] = "!" # default value, implemented when bot joins for the first time

    with open("./prefixes_data.json", "w") as f:
        json.dump(prefixes, f, indent=4)

@client.event
async def on_guild_remove(guild):
    with open("./prefixes_data.json", "r") as f:
        prefixes = json.load(f)

    prefixes.pop(str(guild.id))

    with open("./prefixes_data.json", "w") as f:
        json.dump(prefixes, f, indent=4)
  

команда

 @client.command()
async def changeprefix(ctx, new_prefix):
    with open("./prefixes_data.json", "r") as f:
        prefixes = json.load(f)
        
    prefixes[str(ctx.guild.id)] = new_prefix

    with open("./prefixes_data.json", "w") as f:
        json.dump(prefixes, f, indent=4)

    ctx.send(f"Changed the prefix to: {new_prefix}")
  

теперь я хочу сделать это, но с помощью винтиков (в частности, винтика модерации ботов). Но я не получаю желаемого. Пожалуйста, помогите. Пожалуйста. это код cog, который я пробовал.

 import discord
from discord.ext import commands
import json

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

    @commands.command
    async def changeprefix(self, ctx, new_prefix):
        with open("../prefixes_data.json", "r") as f:
            prefixes = json.load(f)

        prefixes[str(ctx.guild.id)] = new_prefix
        
        with open("../prefixes_data.json", "w") as f:
            json.dump(prefixes, f, indent=4)

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

я хочу, чтобы все события были в главном боте.py-файл, и команда поступает в файл cog (BotModeration)

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

1. Когда вы говорите «это не работает в Cogs», это помогает опубликовать код, который вы пробовали, чтобы мы могли определить проблему. Можете ли вы показать код винтика и что вы пытались сделать?

2. @stijndcl конечно, подождите секунду

3. Вы загружаете винтик в свой основной бот. py-файл? Я не вижу, чтобы вы делали это где-нибудь. Может быть глупый вопрос, но он также может быть ответом.

4. @stijndcl да, я загрузил винтик в основной бот. py-файл.

Ответ №1:

Мне показалось, что у меня это получилось.

 import discord
from discord.ext import commands
import json

class Config(commands.Cog, name="Configuration"):
        
        def __init__(self, bot):
            self.bot = bot
            
        @commands.Cog.listener()
        async def on_ready(self):
            print(f"{self.__class__.__name__} Cog has been loadedn-----")
            
        @commands.command()
        async def prefix(self, ctx, new_prefix):
                  with open("./prefixes.json", "r") as f:
                    prefixes = json.load(f)
                    
                    prefixes[str(ctx.guild.id)] = new_prefix
                    
                    with open("./prefixes.json", "w") as f:
                        json.dump(prefixes, f, indent=4)
            
def setup(bot):
    bot.add_cog(Config(bot))