discord.py 更改 on_member_join 上文本频道的权限

时间:2021-03-07 05:03:04

标签: python discord.py

我正在尝试制作一个不和谐的机器人,该机器人在 on_member_join read_messages = False 上提供成员。当我在 for 循环中遍历所有可能的不和谐文本通道时,我只能实现这一点,但我只想为特定通道执行此操作。我知道如何创建频道并将其设置为 read_messages = False,但我需要在现有频道上执行此操作。

我当前的代码:

import time
import discord
from dotenv import load_dotenv
import os
import random
from discord.utils import get
import asyncio

load_dotenv()
DISCORD_TOKEN = os.getenv("DISCORD_TOKEN")

intents = discord.Intents.default()
intents.members = True

client = discord.Client(intents=intents)

@client.event
async def on_member_join(member):
    if member.guild.id == 599754972228888888:
        print("Correct guild. New  member: " + str(member))
    else:
        return
    guild = client.get_guild(599754972228888888)
    channel = client.get_channel(517974569018888888)
    print(guild.channels)
    for cha in channel.channels:
        await cha.set_permissions(member, read_messages=False)


client.run(DISCORD_TOKEN)

2 个答案:

答案 0 :(得分:0)

  1. 是否有任何理由不从您的 Discord 服务器设置中简单地拒绝该特定频道的 @everyone-role 读取权限?
  2. 假设channel = client.get_channel(517974569018888888)是您要调整权限的频道,您可以直接拒绝阅读权限
await channel.set_permissions(member, read_messages=False)
  1. 如果 channel 不是您想要的频道或涉及一些动态,您可以使用 discord.utils.get 来获取频道,例如提供频道名称,然后继续 2。

两种解决方案都不需要for循环,可以完全消除

答案 1 :(得分:0)

我认为您想制作一个文本频道,只能让管理员或经过验证的用户或类似的人看到。

@client.event
async def on_member_join(member):

    channel = discord.utils.get(member.guild.channels, name="NAME")
    await channel.set_permissions(member, read_messages=False)

如果您想为每个人设置权限,请执行以下操作:

@client.command()
@command.has_permissions(administrator=True)
async def setperms(ctx):
    guild = ctx.guild

    role = discord.utils.get(guild.roles, name="@everyone")
    
    channel = discord.utils.get(member.guild.channels, name="NAME")
    await channel.set_permissions(member, read_messages=False)

将 NAME 替换为您频道的名称