Загрузка...

AttributeError: Guild object has no attribute guild или как пофиксить class в python?

Тема в разделе Python создана пользователем Shandeika 18 дек 2020. 191 просмотр

  1. Shandeika
    Shandeika Автор темы 18 дек 2020 Заблокирован 156 17 окт 2018
    Захотел использовать в своем боте класс, но он выдает ошибку:
    AttributeError: 'Guild' object has no attribute 'guild'

    Не совсем понимаю из за чего такое, вот код:
    Код
    import configparser
    import discord
    from discord.ext import commands

    config = configparser.ConfigParser()
    config.read("config.ini", encoding='utf-8')

    bot = commands.Bot(command_prefix=config["Config"]["prefix"], intents=discord.Intents.all())
    #удаление стандартной команды help
    bot.remove_command('help')

    class NewYear:

    async def __init__(self, guild):
    self.guild = guild

    async def ny_start(self):
    #изменение названия сервера
    guild_name = self.guild.name
    try:
    await self.guild.guild.edit(name=f'{guild_name}')
    except:
    print('Нет прав для изменения названия сервера')
    await self.guild.owner.send('Эй, бот не имеет прав.\n Вы должны выдать права "Управлять каналами","Управлять никнеймами","Управлять сервером","Управлять сообщениями" и запустить команду .start')
    return
    members = self.guild.members
    #перебор участников и установка ника
    for member in members:
    raw_name = member.name
    name = raw_name.replace("","")
    await member.edit(name=f'{name}', reason='Новый год ')
    #назначение прав для канала
    overwrites = {
    self.guild.default_role: discord.PermissionOverwrite(connect=False),
    self.guild.owner: discord.PermissionOverwrite(connect=True)
    }
    await self.guild.create_voice_channel('Новый год ', overwrites=overwrites, position=0)
    return

    async def ny_reset(self):
    #то же самое, но в обратном направлении
    #изменение названия сервера
    guild_name = self.guild.name
    await self.guild.edit(name=guild_name.replace("",""))
    members = self.guild.members
    #перебор участников и сброс ника
    for member in members:
    name = member.name
    await member.edit(name=name.replace("",""), reason='Конец нового года')
    #удаление канала "Новый год "
    for voice in self.guild.voice_channels:
    if voice.name == 'Новый год ':
    await voice.delete()

    @bot.event
    async def on_ready():
    print("Запустился под", bot.user)
    #установка статуста(Играет в {игра})
    await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.playing, name=config["Config"]["activity"]))

    @bot.event
    async def on_guild_join(guild):
    await NewYear.ny_start(guild)


    @bot.command(aliases=['помощь'])
    async def help(ctx):
    await ctx.message.delete()
    embed=discord.Embed(title="christmas-tree-in-discord", url="https://github.com/Shandeika/christmas-tree-in-discord", description="При входе на сервер проходится по каждому пользователю и добавляет ему перед ником и после. Украсит ваш сервер к новому году.")
    embed.set_author(name="Shandy", url="https://vk.com/id0", icon_url="https://images-ext-1.discordapp.net/external/Nifqk3jVLvmFBCoVz1hauEOemI9X2MJPAGByFf5xpBk/%3Fsize%3D512/https/cdn.discordapp.com/avatars/335464992079872000/9c00b41b1efbc4fd02dce40ff5469bc0.png")
    embed.set_image(url='https://media.discordapp.net/attachments/680742104187797606/789168605961912322/cristmas_tree_bot.png')
    embed.set_footer(text="Copyright © 2019–2020 Shandy developer agency All Rights Reserved. © 2020")
    await ctx.channel.send(embed=embed)

    @bot.command(aliases=['старт'])
    @commands.has_guild_permissions(administrator=True)
    async def start(ctx):
    await ctx.message.delete()
    await ctx.channel.send('Запущен процесс "новогодизации" сервера, ожидайте, пожалуйста.\nЭтот процесс может длиться достаточно долго.')
    await NewYear.ny_start(ctx.guild)
    await ctx.channel.send('Успешно!')

    @bot.command(aliases=['сброс'])
    @commands.has_guild_permissions(administrator=True)
    async def reset(ctx):
    await ctx.message.delete()
    await ctx.channel.send('Запущен процесс сброса изменений, ожидайте, пожалуйста.\nЭтот процесс может длиться достаточно долго.')
    await NewYear.ny_reset(ctx.guild)
    await ctx.channel.send('Успешно!')

    bot.run(config["Config"]["token"])
    Если вместо self.guild.edit писать self.edit все начинает работать, но VSCode показывает ошибку:
    [IMG]
    Как быть?
     
  2. Pcholken
    Pcholken 18 дек 2020 Заблокирован(а) 819 27 янв 2019
    ошибку скрином дай
    --- Сообщение объединено с предыдущим 18 дек 2020
    ты здесь передаёшь guild, хотя в атрибутах его не указал + у тебя не используется конструктор
     
    1. Shandeika Автор темы
      Pcholken,
      Python
          async def __init__(self, guild):
      self.guild = guild
      Это разве не он?
    2. Pcholken
      Shandeika, так у тебя нету его вызовы
    3. Shandeika Автор темы
      Pcholken, справедливо :D
      Руки из попени, надо исправляться) спасибо за помощь
Top
Загрузка...