用discord.py重复命令

时间:2020-07-03 23:11:24

标签: discord.py

我正在使用discord.py发出重复命令,在该命令中您发送命令,并重复发送的消息。它可以工作,但是唯一的问题是如果我使用空格,例如“您好,我是“,它只会打印出” Hello“。我该如何解决?

这是我的代码:

import discord
import hypixel
from discord.ext import commands

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

@bot.event
async def on_ready():
    print("Ready to use!")

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

@bot.command()
async def send(ctx, message):
    channel = bot.get_channel(718088854250323991)
    await channel.send(message)

bot.run('Token')

3 个答案:

答案 0 :(得分:5)

首先,从不公开展示您的机器人令牌,这样任何人都可以为您的机器人编写代码,并使它能够执行该人想要的任何事情。

关于您的问题, 如果您使用Hello I'm调用命令,它将仅返回Hello。这是因为在您的send函数中,您仅接受一个参数。

因此,如果您发送Hello I'm,则仅使用传递给它的第一个参数Hello。如果再次调用该命令,但是这次用引号引起来,例如"Hello I'm",它将返回Hello I'm

解决方案是将您的send函数更改为类似的形式,该过程将使用任意数量的参数,然后将它们连接在一起:

async def test(ctx, *args):
    channel = bot.get_channel(718088854250323991)
    await channel.send("{}".format(" ".join(args)))

将加入传递给它的所有参数,然后发送该消息。

如此处Official Docs

替代方法:仅使用关键字参数: 也可以通过以下方式完成:

async def test(ctx, *, arg):
        channel = bot.get_channel(718088854250323991)
        await channel.send(arg)

同样,请参考Keyword-only arguments

上的官方文档

答案 1 :(得分:1)

只需这样写:

@bot.command()
async def yourcommand (ctx,*,message):
    await ctx.send(f"{message}")

答案 2 :(得分:0)

将代码更改为以下内容:

@bot.command()
async def send(ctx, *, message):
    channel = bot.get_channel(718088854250323991)
    await channel.send(message)

这使您可以在同一条消息中设置多个值。更好的方法是:

@bot.command()
async def send(ctx, *, message:str):
    channel = bot.get_channel(718088854250323991)
    await channel.send(message)

这将确保将消息值转换为字符串。永远是个好习惯,因为您不知道是否可以打错字并将其用作其他数据类型。