[英]Is there any way I can make my discord bot send same messages(without skipping the older messages) in different servers
[英]how can i make the bot delete any discord link without deleting my own servers link?
我的机器人应该删除任何 discord 链接,该链接在服务器上的任何消息中发送,除了自己的服务器链接。 我目前取得的成就是,内容为“discord.gg”的每个链接都被删除并记录下来,因此我可以通过控制台查看消息内容,但我不知道如何将一个特定链接列入白名单。
我当前的代码(没有我失败的尝试):
@bot.event
async def on_message(message):
print("The message's content was", message.content)
await bot.process_commands(message)
msg_cnt = message.content.lower()
if "discord.gg" in msg_cnt:
await message.delete()
print('deleted link:', message.content)
有人知道如何忽略一个(或两个)特定的 discord 邀请链接吗?
我尝试发出第二个命令,以便机器人在需要时发布链接,但这不是重点,它不应该删除包含特定(白名单)链接的消息。
尝试(你可以忽略那个):
@bot.command()
async def test(ctx):
'''
posts test Server link # text for the help command
'''
await ctx.send("discord.gg/test")
那没有达到我想要的。
我认为使用fetch_invite
是可行的。 不过,您必须解析消息内容才能获得邀请链接。 也许看着regex 。
message_content = message.content.lower()
if "discord.gg" in message_content:
url = # parse the message content to get the invite link
try:
invite = await bot.fetch_invite(url)
except (ValueError, discord.NotFound):
# invite is invalid
return
delete_message = False
if type(invite) in [discord.PartialInviteGuild, discord.PartialInviteChannel]:
if invite.id != message.guild.id:
delete_message = True
else:
if invite.guild.id != message.guild.id:
delete_message = True
if delete_message:
await message.delete()
print("deleted link:", message.content)
else:
print("link is for our guild")
我认为这会起作用。 如果它不是一个有效的邀请(过期或错误的链接),那么它会引发一个错误,我们可以捕获并返回。 否则,如果邀请是针对您的机器人不在的服务器,则它会获得discord.PartialInviteGuild
类型或discord.PartialInviteChannel
类型。 您可以在那些服务器上使用id
属性来获取它所邀请的服务器的公会 ID。 如果它是您的机器人所在服务器的邀请,那么我们必须使用返回的Invite
类型的guild
属性来获取公会 ID。
或者,您只需为您的服务器维护一个邀请列表(并将创建限制为您自己)并且不要删除与白名单中的邀请相匹配的邀请。 甚至还有一个on_invite_create
事件,您可以收听以跟踪为您的公会创建的新邀请,并将它们动态添加到您的白名单中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.