如何用另一个词替换一行中的多个词

How to replace multiple words in a line with another words

我最近开始在 discord.py 中构建一个机器人,但在这里遇到了这种情况

@client.command()
async def replace(ctx, *, arg):
     msg = f"{arg}" .format(ctx.message).replace('happe', '<:happe:869470107066302484>')
     await ctx.send(msg)

这是一个用表情符号替换单词“happe”的命令,因此看起来像:

Command : {prefix}replace 我很高兴

结果:我很“开心”

但我想做到这一点,这样我们就可以用不同的表情符号替换多个单词,而不仅仅是像

这样的单个单词

命令:{prefix}replace i am not happe, i am sad

结果:我不是“开心表情”,我是“伤心表情”

有没有办法像使用 json 制作表情符号列表及其 ID 的文件一样,在一个句子中编辑多个单词? 此命令似乎在 cogs 中也不起作用,并表示命令无效

is there a way to edit multiple words in just one sentence like using a json file ot making a list of emojis and its id?

是的,你可以做到这一点。列出单词-表情符号对并遍历所有这些以替换每个单词。

async def replace(ctx, *, arg):
    l = [("happe", "<:happe:869470107066302484>"), ("sad", "..."), ...]
    msg = arg  # Making a copy here to avoid editing the original arg in case you want to use it at some point
    for word, emoji in l:
        msg = msg.replace(word, emoji)
    await ctx.send(msg)

also this command doesnt seems to work in cogs and says command is invalid

cogs 中装饰器是 @commands.command()不是 @client.command()。不要忘记 from discord.ext import commands 导入以访问它。

最后,我有点困惑 f"{arg}" .format(ctx.message) 应该做什么?您可以完全删除 .formatf-stringargs 已经是一个 string 所以把它放在一个 f-string 中没有任何其他效果,并且 .format(ctx.message) 也没有做任何事情。整个事情的结果与 arg.

相同
>>> arg = "this is the arg"
>>> f"{arg}".format("this has no effect")
'this is the arg'