Когда пишу почти любую команду, бот отправляет её повторно, хотя файл запущен только 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))