我正在尝试制作一个不和谐的机器人,它将获取用户发布的 Twitter 链接,复制它,添加 VX 并发布它,以便它正确嵌入,并删除原始消息。
我似乎无法找出让机器人复制文本的最佳方法,在“twitter”之前添加“vx”并发布该文本。 就像这样 https://twitter.com/i/status/xxxx > https://vxtwitter.com/i/status/xxxx
这就是我所拥有的
@bot.event
async def on_message(message):
if message.content == 'https://twitter.com':
messages=await message.channel.send("https://vxtwitter.com")
await asyncio.sleep(INT)
await messages.edit(content="https://vxtwitter.com")
我似乎也无法让 ctx 在我的代码中工作,我不确定它是否会帮助我让它工作。 如有任何帮助,请提前致谢。
为了解决您的问题,您需要浏览一下内容的长度。幸运的是,您知道放置“vx”的确切位置。
代码:
@bot.event
async def on_message(message: discord.Message):
if "https://twitter.com/" in message.content:
new_message = message.content[:8] + "vx" + message.content[8:]
await message.channel.send(new_message)
await message.delete()
await bot.process_commands(message)
说明:
您知道要将
"vx"
放在 "twitter.com/"
之前和 "https://"
之后。在 "twitter.com/"
之后,您不知道用户将输入多少个字符。所以我们使用固定长度的"https://"
。那是8个字母。
对于新消息,我们需要
https:// + vx + twitter.com/...
,因此我们包含原始消息的前 8 个字母:message.content[:8]
,然后添加 "vx"
,然后添加原始消息的其余部分:message.content[8:]
[:8]
表示第 8 个字母之前的所有内容以及第 8 个字母本身
[8:]
表示第8个字母之后的所有内容
bot.process_commands(message)
是针对ctx
问题的。如果您不将此行放入 on_message
事件中,机器人将在尝试使用该命令作为消息执行某些操作时陷入困境。使用这一行,它将首先检查您的消息是否是命令。
我想就是这样。如果您有疑问,我会尽力解答。