Discord.py:如何提取布尔值以判断某人是不是静音
Posted
技术标签:
【中文标题】Discord.py:如何提取布尔值以判断某人是不是静音【英文标题】:Discord.py: How to extract a Boolean value for if someone is muted or notDiscord.py:如何提取布尔值以判断某人是否静音 【发布时间】:2021-07-02 05:47:29 【问题描述】:最近,我一直在为特定的不和谐服务器开发我的机器人。在服务器中,我观察到如果我关闭正在运行的脚本然后再次运行它,先前插入的数据将被删除,这是我不希望发生的。这会导致周围发生各种错误。
我的机器人将某人静音的方式是分配一个角色名称:静音。该角色已禁用发帖和加入VC的权限。因此,当版主询问时,我的机器人会扮演这个角色。
我有一个tempmute
命令,它会在特定时间使某人静音,但如果机器人关闭,那么计时器也会重置,许多其他事情也会发生同样的情况。就像有一个列表,我使用命令向其中添加成员。但是一旦机器人重新启动,它也会被重置。
我希望您帮助我如何将数据存储在 JSON 文件中,我将在其中插入每个成员的数据。以下是我要保存的内容:
姓名: 静音:真/假(我不知道!) 禁止:真/假(我不知道!) 静音时间:(我不确定!) 禁令时间:(我不确定!) 最后一条消息:我添加注释的东西是我不知道的。请让我知道如何在这里做我想做的事。任何帮助将不胜感激。
我的代码的链接是:https://paste.pythondiscord.com/pogapiyolu.py
谢谢! :)
【问题讨论】:
你把time
计入分钟数吗?
你想用mute
实现什么功能?该命令是否应该给他们一个“静音”角色,从而剥夺他们发布信息或说话的能力?还是应该在他们加入语音频道时将他们静音?
@CaptAngryEyes 时间在seconds
。 :)
@CaptAngryEyes 另外,mute
会: 1. 无法发送消息 2. 无法加入语音频道 3. 如果已经在频道中,则无法说话 我的命令给出了成员一个名为:Muted
的角色不允许成员这些事情
您能否编辑帖子以包含此信息?
【参考方案1】:
要执行您的命令,我们需要一些参数。我们需要的信息是:要静音的用户和静音的时间。根据您的要求,我将完成创建命令以将上述信息存储在 JSON 文件中并为用户提供“静音”角色的过程。我将让您倒计时并删除“静音”角色。过程非常相似。
所以首先在与您的脚本相同的目录中创建一个 JSON 文件。我将我的命名为“mute.json”。该文件必须包含以下内容:
"users": [
]
然后创建命令,传入所需的参数并加载 JSON 文件。
@bot.command()
async def tempmute(ctx, member : discord.Member, time : int):
with open('mute.json') as f:
data = json.load(f)
现在我们需要检查用户是否已经在我们的 JSON 文件中。为此,我们遍历文件中已有的所有用户并将他们的 ID 附加到列表中。然后我们检查用户是否在该列表中。如果他不在我们的文件中,我们将带有他的信息的对象添加到“用户”数组中。
all_users = []
for user in data['users']:
all_users.append(user['id'])
if member.id in all_users:
else:
data["users"].append("id":member.id, "muted":True, "banned":False, "mute_time":time, "ban_time":0, "last_message": "")
注意:我使用用户 ID 来引用他。这种方式比使用他的名字更好,因为它与 id 不同,可以更改。
接下来,我们需要检查文件中的用户是否与我们指定的用户匹配。
if member.id == user['id']:
现在我们检查用户是否已经静音。如果他不是,我们将他静音并定义静音时间。这是我们将赋予用户“静音”角色的部分。
if user['muted'] == False:
user['muted'] = True
user['mute_time'] = time
mute_role_id = member.guild.get_role(9999999999999999) # Change this to the "Muted" role ID
await member.add_roles(mute_role_id)
现在我们已经对 JSON 文件进行了更改并将角色分配给了用户,我们必须保存更改。
with open('mute.json', 'w') as f:
json.dump(data, f, indent=2)
所以最终的完整命令如下所示:
@bot.command()
async def tempmute(ctx, member : discord.Member, time : int):
with open('mute.json') as f:
data = json.load(f)
all_users = []
for user in data['users']:
all_users.append(user['id'])
if member.id in all_users:
for user in data['users']:
if member.id == user['id']:
if user['muted'] == False:
user['muted'] = True
user['mute_time'] = time
mute_role_id = member.guild.get_role(9999999999999999)
await member.add_roles(mute_role_id)
else:
mute_role_id = member.guild.get_role(9999999999999999)
await member.add_roles(mute_role_id)
data["users"].append("id":member.id, "muted":True, "banned":False, "mute_time":time, "ban_time":0, "last_message": "")
with open('mute.json', 'w') as f:
json.dump(data, f, indent=2)
您也可以修改和调整值以使其成为“禁止”命令。 希望能帮上忙!
【讨论】:
我试过这段代码。但是当我执行它时,什么也没发生。 这就是问题所在。没有错误。它什么都不做。 使用此代码。这是我创建的命令:paste.pythondiscord.com/pepenegebe.py 在第一个“for”循环中添加“print”语句并打印“all_users”。它说什么? 哦,等一下。以上是关于Discord.py:如何提取布尔值以判断某人是不是静音的主要内容,如果未能解决你的问题,请参考以下文章
如何让我的 discord.py 机器人提及我的消息中提到的某人?