Elezthem
@Elezthem
Full Stack Developer

Как исправить дубляж команд?

Когда пишу почти любую команду, бот отправляет её повторно, хотя файл запущен только 1 раз, и это происходит именно с этим когом.

Суть вопроса убрать дубляж команд ( хочу чтобы в моем боте тоже можно было менять префикс на разных серверах )

Вот код:
import nextcord
from nextcord.ext import commands
import sqlite3


class PrefixCog(commands.Cog):
    def __init__(self, bot):
        self.bot = bot

        # Подключение к базе данных
        self.conn = sqlite3.connect('prefix.db')
        self.cursor = self.conn.cursor()

        # Создание таблицы для хранения префикса команд
        self.cursor.execute('''
            CREATE TABLE IF NOT EXISTS guild_settings (
                guild_id INTEGER PRIMARY KEY,
                prefix TEXT DEFAULT '!'
            )
        ''')
        self.conn.commit()

    # Команда для изменения префикса команд
    @commands.command()
    @commands.has_permissions(administrator=True)
    @commands.guild_only()  # Добавлен декоратор
    async def setprefix(self, ctx, prefix):
        guild_id = ctx.guild.id

        self.cursor.execute('''
            INSERT OR REPLACE INTO guild_settings (guild_id, prefix)
            VALUES (?, ?)
        ''', (guild_id, prefix))
        self.conn.commit()

        await ctx.send(f'Префикс команд изменен на {prefix}')
        
        # Обновляем префикс в боте
        self.bot.command_prefix = commands.when_mentioned_or(prefix)

    # Тестовая команда
    @commands.command()
    @commands.guild_only()  # Добавлен декоратор
    async def test(self, ctx):
        await ctx.send('Это тестовая команда!')

    # Получение префикса команд
    @commands.Cog.listener()
    async def on_message(self, message):
        if message.author.bot:
            return

        guild_id = message.guild.id

        self.cursor.execute('''
            SELECT prefix FROM guild_settings WHERE guild_id = ?
        ''', (guild_id,))
        result = self.cursor.fetchone()

        if result:
            prefix = result[0]
        else:
            prefix = '.'

        self.bot.command_prefix = commands.when_mentioned_or(prefix)

        await self.bot.process_commands(message)

def setup(bot):
    bot.add_cog(PrefixCog(bot))
  • Вопрос задан
  • 304 просмотра
Решения вопроса 2
Перестать бездумно копировать код и убрать ту строку, которая обрабатывает команды во второй раз

discord.ext.commands.Bot.process_commands

await self.bot.process_commands(message)
Ответ написан
Комментировать
Elezthem
@Elezthem Автор вопроса
Full Stack Developer
Или проверь что у тебя бот не запущен 2 раза :)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы