我想创建一个黑名单命令来阻止来自特定公会 discord.py 的邀请

Posted

技术标签:

【中文标题】我想创建一个黑名单命令来阻止来自特定公会 discord.py 的邀请【英文标题】:I want to make a blacklist command that blocks an invite from a specific guild discord.py 【发布时间】:2021-07-02 08:59:20 【问题描述】:

我对这一切都很陌生。我想发出一个命令,阻止用户从黑名单公会发送链接。 该命令如下所示: !blacklist (guild id) 原因 这是目前为止的代码

async def server_blacklist(ctx, guild_id: int,*,reason= "no reason provided"):
    guild = client.get_guild(guild_id)
    invitelink = await delete_invite(guild)

我的第一个想法是我需要以某种方式存储公会 ID(在 .txt 或 .db 中)。但我不知道怎么做。

【问题讨论】:

您想将邀请列入一般黑名单吗?每个邀请都包含 discord.gg ,您只需将其列入黑名单即可。 不,我想通过它的 id 将特定公会列入黑名单。因此,当有人违反规则时。我可以把他列入黑名单 2 但是您无法确定用户是否来自公会,对吗?不知道你的方法是否可行。从这个角度来看,他也可以来自另一台服务器,如果我理解正确的话,你想要的方法会因为他在黑名单服务器上而阻止他的链接。 是的,但这不是重点。我想使用 server-id 将来自服务器的邀请列入黑名单。因此,当用户向该服务器发送邀请时。它会删除它@Dominik 每个邀请都是不同的/独一无二的。如果您的机器人不在服务器上,您将无法获取创建的邀请。只需将discord.gg 列入黑名单即可。 【参考方案1】:

我之前的回答不满意,所以来一个新的:如果你想写文件,我建议this page。

以及更彻底的解释将某个公会列入黑名单的方法:

我发现可以将某些公会列入黑名单的方法比我想象的要简单得多,邀请对象具有公会属性,因此您可以轻松检查。

一个如何做你想做的事情的“简单”例子是:

@client.command()
async def server_blacklist(ctx, guild_id: int):  # Blacklisting command
    # To add a guild id to the file:
    with open("blacklisted guilds.txt", "a") as blacklistfile:  # Open file in append mode
        blacklistfile.write(f"guild_id\n")  # Add a new line with the guild id


@client.event
async def on_message(message):  # Event that triggers every time a message is sent
    if "discord.gg" in message.content:  # Check if message has "discord.gg"
        inviteid = message.content.split("discord.gg/")[1].split(" ")[0]  # Get the invite id from the link
        invite = await client.fetch_invite(inviteid)  # Get the invite object from the id
        guild_id = invite.guild.id  # Get the guild id
        # To retrieve the guild ids and check against another
        with open("blacklisted guilds.txt", "r") as blacklistfile:  # Open file in reading mode
            for idstring in blacklistfile.read().split("\n"):  # Start iterating through all the lines
                if not idstring == "":  # Check if line has content
                    if int(idstring) == guild_id:  # Check if the id from the file is the same as guild_id
                        await message.delete()
                        await message.channel.send(f"message.author.mention! Don't send invites to that server here!")
                        break  # Stop the for loop, since we have already matched the guild id to a blacklisted one

    await client.process_commands(message)  # When using the on_message event and commands, remember to add this, so that the commands still work

【讨论】:

谢谢。会尝试一下,看看它是如何工作的

以上是关于我想创建一个黑名单命令来阻止来自特定公会 discord.py 的邀请的主要内容,如果未能解决你的问题,请参考以下文章

Discord.js 公会特定命令

如何阻止创建名称与特定模式匹配的 MySQL 数据库

在 PHP 中阻止来自我的网站的特定 IP 块

如何阻止国家/地区的admob广告

如何使用数据库(MongoDB)和 Discord.js 制作“setWelcome”命令?

如何让机器人在不使用命令的情况下向特定频道中的特定公会发送消息