Beispiel #1
0
async def update_levels(ctx: discord.ext.commands.Context):
    global DBGuilds

    i = 0
    for discordUser in ctx.guild.members:
        if discordUser.bot:
            continue
        try:
            DBUser = UserService.get_user_by_id(userId=discordUser.id)
        except ValueError:
            UserService.add_new_user(userId=discordUser.id)
            await _dialog.message.log(
                message=
                f'[{ctx.guild.name}] Обнаружен пользователь {discordUser.name} ',
                color='yellow')
            DBUser = UserService.get_user_by_id(userId=discordUser.id)
        oldLevel = DBUser.level
        DBUser.level = get_level_from_exp(exp=DBUser.exp)
        newLevel = DBUser.level
        if oldLevel < newLevel:
            i += 1
        UserService.update_user(user=DBUser)
        await usersProcessing.fix_level_role(
            user=discordUser,
            rolesList=ctx.guild.roles,
            levelRoleDict=DBGuilds[ctx.guild.id].levelsMap,
            funcX=get_level_from_exp,
            exp=DBUser.exp)

    await _dialog.message.bomb_message(ctx=ctx,
                                       message=f'обновлено пользователей {i}')
Beispiel #2
0
async def check_level_and_role(discordUser, discordGuild, levelRoleDict, funcX, checkAllRoles: bool = False):
    updated = False
    # Получение пользователя из БД
    try:
        DBUser = UserService.get_user_by_id(userId=discordUser.id)
    except ValueError:
        UserService.add_new_user(userId=discordUser.id)
        await _dialog.message.log(message=f'[{discordGuild.name}] Обнаружен пользователь {discordUser.name} ',
                                  color='yellow')
        DBUser = UserService.get_user_by_id(userId=discordUser.id)

    # Сверка уровня
    oldLevel = DBUser.level
    DBUser.level = funcX(exp=DBUser.exp)
    newLevel = DBUser.level
    if oldLevel != newLevel:
        UserService.update_user(user=DBUser)
        updated = True

    if not updated and not checkAllRoles and newLevel not in levelRoleDict:
        return updated


    # Получение роли, соответсвующей уровню
    roleLevel = 0
    for levelKey in levelRoleDict.keys():
        if levelKey <= newLevel:
            roleLevel = levelKey
        else:
            break

    # Поиск и удаление предыдущей роли за уровни
    if not checkAllRoles:
        newRoleIndex = levelRoleDict.keys().index(roleLevel)

        if newRoleIndex > 0:
            oldRoleIndex = levelRoleDict.keys().index(newRoleIndex - 1)
            answer = discord.utils.get(discordUser.roles, id=levelRoleDict[oldRoleIndex])

            if answer is not None:
                await discordUser.remove_roles(answer)
    # Удаление всех возможных ролей за уровни
    else:
        for levelKey in levelRoleDict.keys():
            answer = discord.utils.get(discordUser.roles, id=levelRoleDict[levelKey])

            if answer is not None:
                await discordUser.remove_roles(answer)

    if roleLevel in levelRoleDict.keys():
        await discordUser.add_roles(discord.utils.get(discordGuild.roles, id=levelRoleDict[roleLevel]))
Beispiel #3
0
async def exp(ctx: discord.ext.commands.Context, *words):
    try:
        if not (words[0].isdigit() or words[0][1:].isdigit()):
            raise ValueError('число введено неверно')
        expChanging = int(words[0])

        discordUser = messagesProcessing.get_user_link(ctx=ctx)
        UserService.add_user_exp_modifier2(userId=discordUser.id,
                                           exp=expChanging,
                                           expModifier=expChanging)
        # Это вставка из -level для уточнения уровняы
        DBUser = UserService.get_user_by_id(userId=discordUser.id)
        DBUser.exp = exp_from_stats2(UStats=DBUser)
        DBUser.level = get_level_from_exp(exp=DBUser.exp)
        UserService.update_user(user=DBUser)

        text = 'бонус к опыту выдан' if expChanging >= 0 else 'штраф к опыту выдан'
        await _dialog.message.bomb_message(ctx=ctx, message=text)
    except ValueError as valErr:
        await _dialog.message.bomb_message(ctx=ctx,
                                           message=str(valErr),
                                           type='error')
Beispiel #4
0
async def level(ctx, *words):
    await ctx.message.delete()
    await _dialog.message.log(author=ctx.author,
                              message='вызов проверки уровня',
                              ctx=ctx,
                              params=words)

    targetUser = ctx.message.mentions[0] if len(
        ctx.message.mentions) > 0 else ctx.author
    print(f'targetUser: {targetUser}')

    DBUser = UserService.get_user_by_id(userId=targetUser.id)
    DBUser.exp = exp_from_stats2(UStats=DBUser)
    DBUser.level = get_level_from_exp(exp=DBUser.exp)
    UserService.update_user(user=DBUser)

    await usersProcessing.fix_level_role(
        user=targetUser,
        rolesList=ctx.guild.roles,
        levelRoleDict=DBGuilds[ctx.guild.id].levelsMap,
        funcX=get_level_from_exp,
        exp=DBUser.exp)
Beispiel #5
0
async def on_message(mes: discord.Message):
    if mes.author.bot:
        return
    if mes.content.count('@') > DBGuilds[mes.guild.id].maxLinks:
        await mes.delete()
        await mes.channel.send(
            '```удалено сообщение с недопустимым количеством упоминаний```')
        await _dialog.message.log(
            message=
            'канал: {0}, пользователь: {1}][удалено сообщение с недопустимым'
            'количеством упоминаний'.format(mes.author.name, mes.channel.name))
        return
    count = messagesProcessing.text_len(mes.content)

    if (mes.channel.id in DBGuilds[mes.guild.id].spamChannels):

        ActivityLogService.logOneSpamMessage(guildId=mes.guild.id,
                                             userId=mes.author.id,
                                             period=datetime.now().date(),
                                             symbolsCount=count)
        # Пуск команд
        try:
            await asyncio.wait_for(bot.process_commands(message=mes),
                                   timeout=DBGeneralSettings.timeUntilTimeout)
        except asyncio.TimeoutError:
            await mes.channel.send('```timeout```')
        return

    # Проверка уровня
    if UserService.append_stats_on_messages_with_level_check(
            userId=mes.author.id,
            mesCount=1,
            symbolsCount=count,
            exp=(count + 1) / 10,
            funcX=get_level_from_exp):
        DBUser = UserService.get_user_by_id(userId=mes.author.id)
        DBUser.level = get_level_from_exp(exp=DBUser.exp)
        UserService.update_user(user=DBUser)

        if DBUser.Level in DBGuilds[mes.guild.id].levelsMap.keys():
            await usersProcessing.fix_level_role(
                user=mes.author,
                rolesList=mes.guild.roles,
                levelRoleDict=DBGuilds[mes.guild.id].levelsMap,
                funcX=get_level_from_exp,
                exp=DBUser.exp)
        await _dialog.message.bomb_message2(
            mes=mes,
            text=f'{mes.author.name} '
            f'получил(а) новый уровень - {DBUser.Level}!',
            type='error')

    ActivityLogService.logOneMessage(guildId=mes.guild.id,
                                     userId=mes.author.id,
                                     period=datetime.now().date(),
                                     symbolsCount=count)

    # Пуск команд
    try:
        await asyncio.wait_for(bot.process_commands(message=mes),
                               timeout=DBGeneralSettings.timeUntilTimeout)
    except asyncio.TimeoutError:
        await mes.channel.send('```timeout```')
cursor.execute(""" SELECT * FROM userstats """)
data = cursor.fetchall()

UserService.clear_table()
for row in data:
    newUser = User(userId=row[0],
                   exp=row[1],
                   level=row[2],
                   messagesCount=row[3],
                   symbolsCount=row[4],
                   voiceChatTime=row[5])
    newUser.voluteCount = 0
    newUser.expModifier = 0
    UserService.add_new_user(userId=newUser.userId)
    UserService.update_user(user=newUser)

print('data copied')
connection.close()
print('connection closed')

# ========== CONNECTION 2 ===========
GifService.clear_table()
GifGroupService.clear_table()

connection = sql.connect(path2)
cursor = connection.cursor()
print('connected: ' + path2)

# ========== table 1 ===========
cursor.execute(""" SELECT * FROM triggers """)