discord.py код для бота который уберёт разрешение у пользователя на отправку сообщений в определённом канале
если убрать это разрешения, то пользователь не сможет писать в этот канал.
Ответы (2 шт):
Одно из решений данной задачи - создать роль которой запрещено писать в нужном канале и выдавать эту роль пользователям.
На большинстве серверов которые я знаю, мут так работает.
Можно сделать двумя способами: сложным и простым Простой заключается в том, что можно сделать роль (собственноручно или же из кода), и при обнаружении этой роли у пользователя, убирать сообщение. Сложный же сделан так, что создаётся база данных, в которой можно хранить 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")
Вы можете использовать первый способ. Но всё равно будет вероятность того что его возможно снять, удалив роль. Второй же такого не предвещает, но он сложнее