我需要的是一个可以通过简单命令锁定频道的机器人。例如,当有人说锁定时,机器人会打开“不发送消息”。这是我到目前为止所拥有的:
@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`')
当我这样做时,会出现各种错误。 (我是编码新手)
有人可以帮我吗?到目前为止,我发现的所有示例仅显示问题的一个部分,并没有说明如何将命令附加到它。请向我展示整个内容,包括如何使其响应玩家命令以及我需要导入的内容。非常感谢,非常感谢!
答案 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...
。你可以试试。
现在我们已经为我们的机器人创建了一个简单的命令,如果我们想要一个由用户调用的命令应该包含一个参数怎么办?例如,如果您想 ping 服务器上的某个人怎么办?这样做非常简单,并且可以通过许多不同的方式完成。我们将讨论最简单的。
@bot.command()
async def print(ctx, arg):
await ctx.channel.send(arg)
它会做什么?因此,当用户执行命令时,例如:!print apples
机器人会将命令中的单词 apples
视为 arg
,然后将其发送到命令已执行的频道中。< /p>
如果要添加多个参数怎么办?然后呢?这也很简单。这可以通过将函数的定义行更改为:
async def print(ctx, *, arg):
现在 !print
命令之后的所有内容都将被视为 arg
并显示出来。
我们基本上已经涵盖了开发机器人所需的所有内容,但还有一件事需要强调。现在我将提到包的预构建帮助命令。
如您所见,现在除了 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
在这里充当命令的快速显示文本。
这就是您真正需要了解的关于 Commands API
的全部内容。您可以在各种其他网站上了解更多信息。我将在下面添加它们的链接。
Command API
中学习discord.py
的网站:discordpy.readthedocs.io - https://discordpy.readthedocs.io/en/stable/ext/commands/api.html
betterprogramming.pub - 参考链接
realpython.com - https://realpython.com/how-to-make-a-discord-bot-python/#using-bot-commands
希望我能让你理解它。如有任何疑问,请在评论中提问。 :)
谢谢! :D