我正在尝试制作一个不和谐的机器人,该机器人在 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)
答案 0 :(得分:0)
channel = client.get_channel(517974569018888888)
是您要调整权限的频道,您可以直接拒绝阅读权限await channel.set_permissions(member, read_messages=False)
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 替换为您频道的名称