discord.py код для бота который уберёт разрешение у пользователя на отправку сообщений в определённом канале

если убрать это разрешения, то пользователь не сможет писать в этот канал.


Ответы (2 шт):

Автор решения: АБВ

Одно из решений данной задачи - создать роль которой запрещено писать в нужном канале и выдавать эту роль пользователям.
На большинстве серверов которые я знаю, мут так работает.

→ Ссылка
Автор решения: Shade

Можно сделать двумя способами: сложным и простым Простой заключается в том, что можно сделать роль (собственноручно или же из кода), и при обнаружении этой роли у пользователя, убирать сообщение. Сложный же сделан так, что создаётся база данных, в которой можно хранить id пользователей, которым запрещено писать. Этот способ хорош тем, что он никак кроме будущей команды размут не убирается, и он даже при перезапуске сохраняется. А также мало способов его убрать

Простой:

import discord
from discord.utils import get
from discord.ext import commands
client = commands.Bot(command_prefix="!")
@client.command()
async def mute(ctx, user: discord.User):
    role=None
    #проверяем на существование роли
    if not get(ctx.guild.roles, name="Muted"):
        #создаём роль
        role = await ctx.guild.create_role(name="Muted")
    else:
        #берём объект роли
        role = get(ctx.guild.roles, name="Muted")
     #добавляем роль
     await user.add_roles(role)

@client.event
async def on_message(message):
   role = None
   #проверяем на существование роли
   if not get(ctx.message.roles, name="Muted"):
        #создаём если её не существует
        role = await message.guild.create_role(name="Muted")
   else:
       #просто берём объект роли
       role = get(message.guild.roles, name="Muted")   
    #проверяем на содержание роли у человека, написавшего сообщение и канал
    if role in message.author.roles and message.channel.id == id канала который запрещён:
        await message.delete()
client.run("TOKEN")

Сложный:

import discord, sqlite3 #sqlite3 надо скачать (pip install sqlite3) в терминале (командной строке)
from discord.ext import commands
client = commands.Bot(command_prefix="!")
#подключаем базу данных
    db = sqlite3.connect("mutes.db")
    cursor = db.cursor()
    cursor.execute("""CREATE TABLE IF NOT EXISTS mutes (
    name TEXT,
    id INT
    )""") 
@client.command()
async def mute(ctx, user: discord.User):
    #проверяем на существование записи с id пользователя
    if cursor.execute(f"SELECT name FROM mutes WHERE id = {ctx.author.id}").fetchone()[0] is not None:
        await ctx.send("Этот игрок уже замучен")
    else:
        cursor.execute("INSERT INTO mutes VALUES (?, ?)", (ctx.author.name, ctx.author.id))
        await ctx.send("Успешно!")

@client.event
async def on_message(message):
    #проверяем на существование записи с id автора сообщения и соответствие канала с запрещённым
    if cursor.execute(f"SELECT name FROM mutes WHERE id = {message.author.id}") is not None and message.channel.id == id канала в котором запрещено будет писать:
        await message.delete()

client.run("TOKEN")

Вы можете использовать первый способ. Но всё равно будет вероятность того что его возможно снять, удалив роль. Второй же такого не предвещает, но он сложнее

→ Ссылка