Загрузка...

AttributeError: Guild object has no attribute guild or how to fix class in python?

Thread in Python created by Shandeika Dec 18, 2020. 196 views

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

    Не совсем понимаю из за чего такое, вот код:
    Code
    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 Dec 18, 2020 Banned 819 Jan 27, 2019
    ошибку скрином дай
    The post was merged to previous Dec 18, 2020
    ты здесь передаёшь guild, хотя в атрибутах его не указал + у тебя не используется конструктор
     
    1. Shandeika Topic starter
      Pcholken,
      Python
          async def __init__(self, guild):
      self.guild = guild
      Это разве не он?
    2. Pcholken
      Shandeika, так у тебя нету его вызовы
    3. Shandeika Topic starter
      Pcholken, справедливо :D
      Руки из попени, надо исправляться) спасибо за помощь
Top
Loading...