我正在使用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')
答案 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)))
将加入传递给它的所有参数,然后发送该消息。
替代方法:仅使用关键字参数: 也可以通过以下方式完成:
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)
这将确保将消息值转换为字符串。永远是个好习惯,因为您不知道是否可以打错字并将其用作其他数据类型。