@Flener

Пытаюсь понять причину ошибки в боте?

626ee8dac3530068491492.png
При любом событие связанным с голосовой активностью, вылетает данная ошибка.
Не могу понять причину. Все работает исправно и свою задачу выполняет.
Но ошибка очень раздражает и засоряет логи.
Хотелось бы найти причину.

Приложил структуру базы MongoDB и часть кода связанную с голосовой активностью.
Все же ошибка которая выпадает связана именно с ней.

post1 = {
            "_id": guild.id,
            "name": guild.name,
            "privatch": 0,
            "categorypr": 0,
            "categorypb": 0,
            "publicch": 0,
            "marry": True,
            "marry_price": 5000,
            "uzhin_price": 500,
            "gif_price": 50,
            "clans": True,
            "chatmx": 1,
            "voicex": 1,
            "members": 0,
            "admins": [],
            "moderators": [],
            "helpers": []
        }
        
        if collguild.count_documents({"_id": guild.id}) == 0:
            collguild.insert_one(post1)



@client.event
async def on_voice_state_update(member, before, after):
    data = colluser.find_one({"_id": member.id})
    for guild in client.guilds:
        datag = collguild.find_one({"_id": guild.id})
        lb = data["localban"]
        vox = datag["voicex"]
        xp = data["exp"]
        xep = data["exp"]
        lvl = data["lvl"]
        cd = time.time()
        lbt = cd - data["localban"]
        lvlup = 500 + 100 * lvl
        expn = xep - lvlup
        prc_v = client.get_channel(datag["privatch"])
        prct = datag["categorypr"]
        pbc_v = client.get_channel(datag["publicch"])
        pbct = datag["categorypb"]
        if after.channel == prc_v:
            overwrites = {
                guild.default_role: discord.PermissionOverwrite(connect=False),
                guild.me: discord.PermissionOverwrite(manage_channels=True, connect=True),
            }
            catpr = discord.utils.get(guild.categories, id=prct)
            voice_channel = await guild.create_voice_channel(member.name, overwrites=overwrites, category=catpr)
            await member.move_to(voice_channel)
        if after.channel == pbc_v:
            overwrites = {
                guild.default_role: discord.PermissionOverwrite(connect=True),
                guild.me: discord.PermissionOverwrite(manage_channels=True, connect=True),
            }
            catpb = discord.utils.get(guild.categories, id=pbct)
            voice_channel = await guild.create_voice_channel(member.name, overwrites=overwrites, category=catpb)
            await member.move_to(voice_channel)
        try:
            if before.channel.members == [] and not before.channel.id == datag["privatch"]:
                if before.channel.category_id == prct:
                    await before.channel.delete()
        except:
                pass
        try:
            if before.channel.members == [] and not before.channel.id == datag["publicch"]:
                if before.channel.category_id == pbct:
                    await before.channel.delete()
        except:
                pass
        if lb >= 0:
            if lbt <= data["cdlb"]:
                return
            else:
                if before.channel is None and after.channel is not None:
                    print(f"Пользователь {member} зашел на канал {after.channel}")
                    t1 = time.time()
                    colluser.update_one({"_id": member.id},
                        {"$set": {"voice_tim1": t1}})
                elif before.channel is not None and after.channel is None:
                    if data["voice_activ"] == 0:
                        return
                    t1 = data["voice_tim1"]
                    voice_activ1 = data["voice_activ"]
                    balance = data["bal"]
                    t2 = time.time()
                    tim = t2-t1
                    print(f"Пользователь {member} вышел с канала {before.channel} И провел в войсе {tim} секунд")
                    colluser.update_one({"_id": member.id},
                        {"$set": {"voice_activ": voice_activ1 + tim}})
                    colluser.update_one({"_id": member.id},
                        {"$set": {"bal": balance + (tim / 12) * vox}})
                    colluser.update_one({"_id": member.id},
                        {"$set": {"exp": xp + (tim / 12) * vox}})
                    if xep >= lvlup:
                        colluser.update_one({"_id": member.id},
                            {"$set": {"exp": expn}})
                        colluser.update_one({"_id": member.id},
                            {"$set": {"lvl": lvl + 1}})
                        if xep >= lvlup:
                            colluser.update_one({"_id": member.id},
                                {"$set": {"exp": expn}})
                            colluser.update_one({"_id": member.id},
                                {"$set": {"lvl": lvl + 1}})
                            if xep >= lvlup:
                                colluser.update_one({"_id": member.id},
                                    {"$set": {"exp": expn}})
                                colluser.update_one({"_id": member.id},
                                    {"$set": {"lvl": lvl + 1}})
                                if xep >= lvlup:
                                    colluser.update_one({"_id": member.id},
                                        {"$set": {"exp": expn}})
                                    colluser.update_one({"_id": member.id},
                                        {"$set": {"lvl": lvl + 1}})
                                    if xep >= lvlup:
                                        colluser.update_one({"_id": member.id},
                                            {"$set": {"exp": expn}})
                                        colluser.update_one({"_id": member.id},
                                            {"$set": {"lvl": lvl + 1}})
                                        if xep >= lvlup:
                                            colluser.update_one({"_id": member.id},
                                                {"$set": {"exp": expn}})
                                            colluser.update_one({"_id": member.id},
                                                {"$set": {"lvl": lvl + 1}})
                                        else:
                                            return
                                    else:
                                        return
                                else:
                                    return
                            else:
                                return
                        else:
                            return
  • Вопрос задан
  • 65 просмотров
Решения вопроса 1
@twistfire92
Python backend developer
Изучите ошибки и научитесь их читать. Сказано же, что datag нет ключа privatch
Поэтому пользуйтесь методом get()
datag.get("privatch", <Значение по умолчанию>).

И что это за адово дерево с if if if if if?
Вы же делаете там одно и то же несколько раз

замените его на
count = 6 # сколько раз вам надо делать эту проверку
for _ in range(count)
    if xep >= lvlup:
        colluser.update_one({"_id": member.id},
            {"$set": {"exp": expn}})
        colluser.update_one({"_id": member.id},
            {"$set": {"lvl": lvl + 1}})
    else:
        return #  или просто break
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы