автоматическое отключение участника, если они произносят определенное слово discord py rewrite

#events #discord #discord.py-rewrite #mute #discogs-api

#Мероприятия #Discord #discord.py #отключение звука #discogs-api

Вопрос:

 import discord
import re
from itertools import cycle


class Status(commands.Cog):
    def __init__(self, client):
        self.client = client
  
  @commands.Cog.listener()
    async def on_message(self, ctx):
        if ctx.author.id == self.client.user.id:
            return
        if re.search("...", ctx.content):
            await ctx.send("you're... gonna get... muted... if you.. talk... like.. this...")
            user = ctx.message.author
            # print(str(user))
            # print(str(message.content))
            muted_role = discord.utils.get(ctx.author.guild.roles, name="Muted")
            await self.client.add_roles(ctx.author, muted_role)
  

Я хочу временно отключить пользователя, если он использует многоточия в отправляемом сообщении. ctx.send не работает, бот не отправляет сообщение на канал. Он говорит, что self.client.add_roles этого не существует.

Muted это созданная мной роль, у которой нет прав на отправку сообщений.

Есть идеи, почему? Некоторая помощь была бы чрезвычайно признательна. Я использую

AttributeError: 'Message' object has no attribute 'send' это ошибка, которую я получаю

[ПРАВИТЬ]

     @commands.Cog.listener()
    # @commands.command()
    async def on_message(self, message):
        if message.author.id == self.client.user.id:
            return
        if re.search("...", message.content):
            await message.channel.send("you're... gonna get... muted... if you.. talk... like.. this...")
            user = message.author
            muted_role = discord.utils.get(message.guild.roles, name="Muted")
            await user.add_roles(muted_role, reason="you know what you did", atomic=True)
  

Я просмотрел документацию и сделал это, это работает, спасибо за поддержку 🙂

Комментарии:

1. измените последнюю строку на await self.user.add_roles(muted_role)

2. сейчас все работает нормально?

3. да, это работает, спасибо

Ответ №1:

Было много ошибок, пожалуйста, взгляните на документацию.

Я исправил их для вас —

  @commands.Cog.listener()
    async def on_message(self, message):
        if message.author.id == self.client.user.id:
            return
        else:
            await message.channel.send("you're... gonna get... muted... if you.. talk... like.. this...")
            user = message.author
            print(str(user))
            print(str(message.content))
            muted_role = discord.utils.get(message.guild.roles, name="Muted")
            await self.user.add_roles(muted_role)
  

Дайте мне знать, если вы все еще получаете какие-либо ошибки.

Последнее редактирование-

Я попробовал эту команду для себя вне cog, и она отлично работает 🙂

 @client.event
async def on_message(message):
    if message.author.id == client.user.id:
        return
    elif "test" in message.content:
        await message.channel.send("you're... gonna get... muted... if you.. talk... like.. this...")
        user = message.author
        print(str(user))
        print(str(message.content))
        muted_role = discord.utils.get(message.guild.roles, name="Muted")
        await user.add_roles(muted_role)
    else:
        return
    await client.process_commands(message)
  

Комментарии:

1. попробуйте использовать await self.user.add_roles(muted_role)

2. AttributeError: 'Status' object has no attribute 'user' это происходит

3. возможно, попробуйте удалить self ?