如何使用 Discord.py Bot 锁定频道

时间:2021-05-07 02:10:34

标签: discord.py

我需要的是一个可以通过简单命令锁定频道的机器人。例如,当有人说锁定时,机器人会打开“不发送消息”。这是我到目前为止所拥有的:

@commands.has_permissions(manage_channels=True)
    async def lockdown(self, ctx, message, channel, member):
        if message.author.id == 767435817034842172 and message.content.startswith('Lock Channel Test'):
          overwrite = discord.PermissionOverwrite()
          overwrite.send_messages = False
          overwrite.read_messages = True
          await channel.set_permissions(member, overwrite=overwrite)
          await message.channel.send('**Channel Locked.**\n\n**Reason:** Guild Save Used\n`Please Wait For An Admin/Moderator To Unlock This Channel`')

当我这样做时,会出现各种错误。 (我是编码新手)

有人可以帮我吗?到目前为止,我发现的所有示例仅显示问题的一个部分,并没有说明如何将命令附加到它。请向我展示整个内容,包括如何使其响应玩家命令以及我需要导入的内容。非常感谢,非常感谢!

1 个答案:

答案 0 :(得分:1)

我看到您是新手,并不真正知道如何创建命令。好吧,我的建议是,当你是新手时,你应该做这么大的项目,因为它们可能会让你感到困惑并使你偏离语言。而是应该从简单的项目开始,例如掷骰子游戏或计算器。

好吧,既然你已经开始了,让我先向你展示如何创建一个机器人。所以我将告诉你如何使用 Commands API 创建一个不和谐的机器人。

我们将讨论如何为您的机器人创建前缀,因为您可能与之交互的大多数机器人都有某种形式的前缀 (e.g. $ or !)。之后,我们将介绍如何创建新命令。最后,我们将查看您的机器人具有的命令列表的内置帮助命令,这样您就不必创建自己的命令。

创建机器人的前缀。

我是从头开始的,但如果您已经有一个包含其他代码的文件,您可以使用它。 所以我创建了一个文件并添加了代码:

import discord
from discord.ext import commands

bot = commands.Bot(command_prefix='!')

bot.run("YOU MAY ENTER YOUR BOT'S TOKEN HERE")

您需要关注这行:bot = command.Bot(command_prefix='!'),因为它在您的代码中非常重要。我假设您一直在使用 discord.Client 来运行您的机器人,但现在是升级和更好的机器人的时候了。

定义机器人的命令。

现在我们已经为我们创建了一个 Bot 对象,我们可以继续为我们的机器人创建一些命令。 Commands API 命令的清晰和可爱之处在于它们仅在顶部添加了一个装饰器,以便我们可以轻松地将它们抽象出来。

让我们为我们制作一个简单的 ping-pong 命令,以便您能够理解它们。

@bot.command()
async def ping(ctx):
    await ctx.channel.send("pong...")

首先,请注意我们如何在函数顶部添加装饰器 @bot.command()bot 是我们上面定义的变量的名称,command() 让机器人知道这是一个特定的命令。

因此,现在转到机器人可以发送消息的任何频道,然后使用命令 !ping,机器人将发送消息 pong...。你可以试试。

Command Test 1

允许您的机器人接受参数。

现在我们已经为我们的机器人创建了一个简单的命令,如果我们想要一个由用户调用的命令应该包含一个参数怎么办?例如,如果您想 ping 服务器上的某个人怎么办?这样做非常简单,并且可以通过许多不同的方式完成。我们将讨论最简单的。

@bot.command()
async def print(ctx, arg):
    await ctx.channel.send(arg)

它会做什么?因此,当用户执行命令时,例如:!print apples 机器人会将命令中的单词 apples 视为 arg,然后将其发送到命令已执行的频道中。< /p>

Arg Command

如果要添加多个参数怎么办?然后呢?这也很简单。这可以通过将函数的定义行更改为:

async def print(ctx, *, arg):

现在 !print 命令之后的所有内容都将被视为 arg 并显示出来。

Multiple Arg Command

使用内置帮助命令。

我们基本上已经涵盖了开发机器人所需的所有内容,但还有一件事需要强调。现在我将提到包的预构建帮助命令。

Help Command 1

如您所见,现在除了 the 之外看不到任何有关该命令的文本,而 help 有一个。我们现在让您为命令添加文本,这可以使用 command() 鉴别器中的一些属性来完成。

@bot.command(
    help="Uses come crazy logic to determine if pong is actually the correct value or not.",
    brief="Prints pong back to the channel."
)
async def ping(ctx):
    await ctx.channel.send("pong")

@bot.command(
    help="Looks like you need some help.",
    brief="Prints the list of values back to the channel."
)
async def print(ctx, *, arg):
    await ctx.channel.send(arg)

现在这会将我们需要的文本添加到我们机器人的 help 命令中。当所有命令在机器人的消息中可见时,brief 在这里充当命令的快速显示文本。

以下是执行的样子: Help Modified


这就是您真正需要了解的关于 Commands API 的全部内容。您可以在各种其他网站上了解更多信息。我将在下面添加它们的链接。

可用于在Command API中学习discord.py的网站:

希望我能让你理解它。如有任何疑问,请在评论中提问。 :)

谢谢! :D