Что такое коги в дискорде
Перейти к содержимому

Что такое коги в дискорде

  • автор:

Ошибка в когах discord.py

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

Нашел туториал, как сделать коги в discord.py, понял принцип сижу пишу, дохожу по последнего штриха в bot.py и тут встречает в консоли такая ошибка. Помогите пожалуйста

Отслеживать

задан 16 сен 2021 в 16:52

user461487 user461487

Попробуйте отредактировать вопрос и вставить Ваш код как код, а не как картинку. А то ведь минусовать вопрос будут.

16 сен 2021 в 16:54

Пожалуйста, уточните вашу конкретную проблему или приведите более подробную информацию о том, что именно вам нужно. В текущем виде сложно понять, что именно вы спрашиваете.

Как работать с когами discord.py?

Я решил переделать свой код под коги. И вот сейчас разбираюсь как с ними работать.
Как сделать ивент или обычную команду я понял.
Но меня сейчас интересует:
1) Как сделать проверку на права в команде
2) Как сделать slash(/) команду в когах? И что надо в ней менять. (пользуюсь dislash для слеш команд)
3) Как в slash(/) командах сделать не обязательный аргумент(когда высвечивается это меню, что бы какой-либо аргумент можно было оставить пустым и всё бы работало).
4) Как использовать json файлы для хранения данных в них в когах

@commands.command() async def mute(self, ctx, member:discord.Member, time, reason): emb = discord.Embed(title='Мут', description=f', вы хотите выдать мут по причине на ') await ctx.send(embed = emb)
@slash.command( guild_ids=test_guilds, name="ban", description="ban user on this server", options=[ Option("user", "Intruder", Type.USER), Option("time", "Mut Time", Type.STRING), Option("reason", "Clause of the Rules", Type.STRING), ] ) @slash_commands.has_any_role(890220161943097404) async def ban(inter,user,time,reason): . 
@commands.Cog.listener() async def on_message(self,message): if message.author.bot == False: with open('warns.json', 'r') as f: warn = json.load(f) await update_warn(warn, message.author) with open('warns.json', 'w') as f: json.dump(warn, f) await bot.process_commands(message) async def update_warn(warn, member): if not f'' in warn: warn[f''] = <> warn[f'']['warn'] = 0
  • Вопрос задан более двух лет назад
  • 1320 просмотров

2 комментария

Простой 2 комментария

Создание когов/дополнений

Коги аналогичны модулям, которые дополняют основное ядро бота, тем самым расширяя его функции и возможности. Они также позволяют вам разбивать бота и упорядочивать коллекцию команд/событий вашего бота (что полезно, когда список команд вашего бота становится довольно большим).

Коги обычно используют вместе с Дополнениями. Вы можете прочитать больше о них в документации.

Создание файлов​

Код, приведённый ниже был описан в Начальные файлы, и, поэтому, мы предполагаем, что уже существует файл main.py в вашем каталоге, который инициирует экземпляр commands.Bot() .

import disnake from disnake.ext import commands bot = commands.Bot()   @bot.event async def on_ready(): print("Бот готов!")  bot.run("YOUR_BOT_TOKEN") 

Далее мы создадим новый Python файл либо в том же каталоге, что и main.py или во вложенной папке (что рекомендуется). Для удобства организации мы создадим файл кога во вложенной папке cogs и назовём его ping.py — только для команды ping . Если вы строго следуете руководству, ваш каталог должен выглядеть примерно так:

. ├── cogs/ │ └── ping.py ├── main.py └── secrets.env 

Начальный код​

Наследование класса​

Первый шаг — создать класс в ping.py , который наследуется от commands.Cog , а так же конструктор, который принимает объект bot в качестве своего единственного аргумента и сохраняет его. Именно здесь мы будет добавлять наши команды.

from disnake.ext import commands   class PingCommand(commands.Cog): def __init__(self, bot: commands.Bot):  self.bot = bot 

Мы добавили анотацию типа bot: commands.Bot здесь, чтобы дать IDE представление о том, какой тип данных содержит аргумент. Это не обязательно, но может быть полезно при разработке.

Регистрация команд​

Теперь, чтобы определить слэш команду внутри класса, мы будет использовать декоратор commands.slash_comamnd() . Он функционирует так же, как и bot.slash_command() , но также работает в когах.

import disnake from disnake.ext import commands   class PingCommand(commands.Cog): def __init__(self, bot: commands.Bot):  self.bot = bot  @commands.slash_command() async def ping(self, inter: disnake.ApplicationCommandInteraction): """Получить текущую задержку бота.""" await inter.response.send_message(f"Понг! round(self.bot.latency * 1000)>мс") 

Обратите внимание, что мы используем self в качестве первого аргумета, поскольку функция команды находится внутри класса.

Добавление функции setup ​

Последнее, что нужно добавить в этот файл, — это функция setup , чтобы disnake мог загружать ког, когда он будет добавлен в main.py .

import disnake from disnake.ext import commands   class PingCommand(commands.Cog): def __init__(self, bot: commands.Bot):  self.bot = bot  @commands.slash_command() async def ping(self, inter: disnake.ApplicationCommandInteraction): """Получить текущую задержку бота.""" await inter.response.send_message(f"Понг! round(self.bot.latency * 1000)>мс")   def setup(bot: commands.Bot):  bot.add_cog(PingCommand(bot)) 

Этот файл кога теперь можно добавить в бота с помощью метода bot.load_extension() в main.py .

import disnake from disnake.ext import commands bot = commands.Bot()   @bot.event async def on_ready(): print("Бот готов!")  bot.load_extension("cogs.ping") # Примечание: расширение .py указывать не нужно bot.run("YOUR_BOT_TOKEN") 

Обратите внимание, что мы указали здесь «cogs.ping» , поскольку файл ping.py находится внутри папки cogs . Поэтому основным синтаксисом для загрузки дополнений является bot.load_extension(«.») .

Для загрузки всех когов из папки cogs используйте метод bot.load_extensions()

bot.load_extensions('cogs') 

И это завершает использование когов в disnake ! Теперь вы можете создать несколько когов для группировки и организации ваших команд/событий, а также загружать/выгружать их через ваш основной файл. Более подробную информацию о специальных методах когов можно найти в документации.

Изменения синтаксиса​

Коги представляют собой довольно радикальное изменение в способе написания команд и ботов, поэтому вот список, к которому вы можете вернуться для основного синтаксиса, используемого в когах:

  • Каждый ког — это класс Python, который наследуется от commands.Cog .
  • Декораторы для команд в когах:
    • Команда — commands.command()
    • Слэш команда — commands.slash_command()
    • Профильные команды — commands.user_command()
    • Команды сообщений — commands.message_command()

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

    Что такое коги в программировании?

    Я изучаю python discord.py, люди постоянно говорят про коги. Есть коды с когами, а есть без них. А что такое коги?

    Буду благодарен за ответ.

    Лучший ответ

    Странно, что ты решил задать этот вопрос тут, а не на хабре. В discord.py Cogs это класс который позволяет группировать команды и делать к примеру раздельные модули, которые можно подгружать и наоборот, прямо во время работы бота. А вообще советую вкурить доки по discord.py (Подчеркивания убрать)
    ht_tps://discordpy.readthedocs.io/en_/latest/ext/commands/api.html?h_ighlight=cog#cogs

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *