Discord.py - Как я могу сделать винтики на сервер - PullRequest
3 голосов
/ 06 июля 2019

У меня есть общедоступный бот с Cogs, но я только что проверил, что если я загружу / разгрузлю Cog, то он будет загружать / выгружать этот Cog на каждом сервере, на котором он находится, это, конечно, ужасно для общедоступного бота

Я покажу свою команду загрузки и выгрузки:

@client.command()
async def load(ctx, extension):
 client.load_extension(f"cogs.{extension}")

 await ctx.send(f"Successfully loaded the {extension} module :thumbsup: ")

@load.error
async def load_error(ctx, error):
 await ctx.send(f"The following error occured:```\n{error}\n```")

- команда загрузки, а:

@client.command()
async def unload(ctx, extension):
 client.unload_extension(f"cogs.{extension}")

 await ctx.send(f"Successfully unloaded the {extension} module :thumbsup: ")

@unload.error
async def unload_error(ctx, error):
 await ctx.send(f"The following error occured:```\n{error}\n```")

- команда выгрузки

Редактировать: Я не против попробовать что-то кроме того, что я пытаюсь

1 Ответ

0 голосов
/ 24 июля 2019

Решением этой проблемы будет добавление простой проверки к каждой команде в cogs, которую вы не хотите использовать public

#add a check to the top of the cog
def isPrivateCommand():
    async def predicate(ctx):
        return ctx.guild.id == YOURGUILDIDHERE
    return commands.check(predicate)

.
.
.

@commands.command
@isPrivateCommand()
async def ...

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

Документацию по чекам можно найти здесь для перезаписи discord.py

Счастливого кодирования!

...