Добрый день, хочу загрузить ког, но выдает ошибку в консоле
privates Error!
Extension 'cogs.privates' raised an error: AttributeError: 'Bot' object has no attribute 'cluster'
Честно даже через переводчик не понял как решить, надеюсь кто-то поможет.
Вот код кога: ( я его немного укоротил так как лимит )
import asyncio
import time
import disnake
import pymongo.collection
from disnake.ext import commands, tasks
test_guild = [1150748296453824592]
class Privates(commands.Cog, name="privatkis"):
def __init__(self, bot):
self.bot: disnake.Client = bot
self.cluster = self.bot.cluster
self.privatki: pymongo.collection.Collection = self.cluster.infinity.privatki
self.member_privatki: pymongo.collection.Collection = self.cluster.infinity.member_privatki
async def members(self, member1: str, guild: disnake.Guild, inter: disnake.MessageInteraction):
id_mem = str(member1) \
.replace("<", "") \
.replace("@", "") \
.replace("!", "") \
.replace(">", "")
try:
member = await guild.fetch_member(int(id_mem))
except disnake.Forbidden:
await inter.edit_original_message(embed=disnake.Embed(description=f'Не нашёл пользователя!'))
return
except disnake.HTTPException:
await inter.edit_original_message(embed=disnake.Embed(description=f'Ошибка! Повторите попытку!'))
return
return member
async def del_chan(self, channel: disnake.VoiceChannel):
try:
await channel.delete(reason='Канал приваток')
except (disnake.Forbidden, disnake.NotFound, disnake.HTTPException):
pass
find = self.privatki.find_one({"_id": channel.id})
if find:
self.privatki.delete_one(find)
return
@commands.Cog.listener()
async def on_voice_state_update(self, member: disnake.Member, before: disnake.VoiceState, after: disnake.VoiceState):
if after.channel and after.channel.id == 1084577338920018076: #вход румы
maincategory = after.channel.category
finds = self.member_privatki.find_one({"member_id": member.id, "guild_id": member.guild.id})
if finds:
abc = finds['name']
name = f'— {abc}'
else:
name = f'— Канал {member.display_name}'
channel2 = await member.guild.create_voice_channel(name=name, category=maincategory, reason='Приватные комнаты || Создание')
try:
await member.move_to(channel2, reason='Приватные комнаты || Перемещение')
except disnake.HTTPException:
await channel2.delete(reason='Защита от краша приваток')
return
post = {
"_id": channel2.id,
"member_id": member.id
}
self.privatki.insert_one(post)
await channel2.set_permissions(member, connect=True, view_channel=True)
if before.channel and before.channel.category.id == 1084577338920018074 and len(before.channel.members) < 1 and before.channel.id != 1084577338920018076: #хуй
await self.del_chan(before.channel)
@commands.command()
async def create_privates_systems(self, ctx):
emoji1 = self.bot.get_emoji(1089640770773983333) # изменить название
emoji2 = self.bot.get_emoji(1089640776281116743) # лимит
emoji3 = self.bot.get_emoji(1089640765220733100) # закрыть комнату
emoji4 = self.bot.get_emoji(1089640772426551397) # открыть комнату
emoji5 = self.bot.get_emoji(1089640767103975554) # забрать доступ
emoji6 = self.bot.get_emoji(1089640774771146893) # выдать доступ
emoji7 = self.bot.get_emoji(1089640780060164277) # выгнать из комнаты
emoji8 = self.bot.get_emoji(1089640768609718382) # забрать право говорить
emoji9 = self.bot.get_emoji(1089640777661022290) # выдать право говорить
emoji10 = self.bot.get_emoji(1089640763392012299) # передать право на комнату
row1 = disnake.ui.ActionRow()
row1.add_button(style=disnake.ButtonStyle.gray, emoji=emoji1, custom_id='pri1')
row1.add_button(style=disnake.ButtonStyle.gray, emoji=emoji2, custom_id='pri2')
row1.add_button(style=disnake.ButtonStyle.gray, emoji=emoji3, custom_id='pri3')
row1.add_button(style=disnake.ButtonStyle.gray, emoji=emoji4, custom_id='pri4')
row1.add_button(style=disnake.ButtonStyle.gray, emoji=emoji5, custom_id='pri5')
row2 = disnake.ui.ActionRow()
row2.add_button(style=disnake.ButtonStyle.gray, emoji=emoji6, custom_id='pri6')
row2.add_button(style=disnake.ButtonStyle.gray,
emoji=emoji7, custom_id='pri7')
row2.add_button(style=disnake.ButtonStyle.gray,
emoji=emoji8, custom_id='pri8')
row2.add_button(style=disnake.ButtonStyle.gray,
emoji=emoji9, custom_id='pri9')
row2.add_button(style=disnake.ButtonStyle.gray,
emoji=emoji10, custom_id='pri10')
embed = disnake.Embed(
title='Управление приватной комнатой',
description=f'Жми следующие кнопки, чтобы настроить свою комнату\nИспользовать их можно только когда у тебя есть приватный канал\n\n'
f'{emoji1} — Изменить **название** комнаты\n'
f'{emoji2} — Изменить **лимит** пользователей\n'
f'{emoji3} — **Закрыть** комнату для всех\n'
f'{emoji4} — **Открыть** комнату для всех\n'
f'{emoji5} — **Забрать** доступ у пользователя\n'
f'{emoji6} — **Выдать** доступ пользователя\n'
f'{emoji7} — **Выгнать** пользователя из комнаты\n'
f'{emoji8} — **Забрать** право говорить\n'
f'{emoji9} — **Выдать** право говорить\n'
f'{emoji10} — Передать **владельца** комнаты\n',
color=0x2b2d31
)
await ctx.send(embed=embed, components=[row1, row2])
async def check_origin_voice(self, member, inter: disnake.MessageInteraction):
if member.voice is not None:
channel = member.voice.channel
finds = self.privatki.find_one({"member_id": member.id})
if finds:
chan_id = finds['_id']
if chan_id == channel.id:
return True
def setup(bot):
bot.add_cog(Privates(bot))