繁体   English   中英

我怎样才能让机器人删除任何 discord 链接而不删除我自己的服务器链接?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM