【问题标题】:discord.py change permission of text channel on on_member_joindiscord.py 更改 on_member_join 上文本通道的权限
【发布时间】:2021-03-09 19:02:07
【问题描述】:

我正在尝试制作一个不和谐的机器人,让 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)

【问题讨论】:

    标签: python discord.py


    【解决方案1】:
    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循环,可以完全消除

    【讨论】:

      【解决方案2】:

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

      @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 替换为您的频道名称

      【讨论】:

        猜你喜欢
        • 2020-06-04
        • 1970-01-01
        • 2019-10-11
        • 1970-01-01
        • 1970-01-01
        • 2020-06-15
        • 2021-12-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多