Ejemplo n.º 1
0
async def leaderboard(message):
    server = Server.get(Server.sid == message.server.id)
    leaders = LocalLevel.select().where(
        LocalLevel.server == server
    ).order_by(
        LocalLevel.level.desc(), LocalLevel.experience.desc()
    ).limit(10)

    lines = []
    lines.append(
        f"{'Username'.ljust(32)}{'Level'.ljust(8)}{'XP'.ljust(10)}"
    )
    for l in leaders:
        m = message.server.get_member(f"{l.user.uid}")
        req = ((8 * l.level) + await diff(l.level)) * await mxp(l.level)
        expstr = f"{l.experience}/{req}"
        if m is not None:
            username = _removeNonAscii(m.name)
        else:
            username = "******"
        lines.append(
            f"{username.ljust(32)}{str(l.level).ljust(8)}{expstr.ljust(10)}"
        )

    msg = '\n'.join(lines)

    codeblock = f"```{msg}```"
    await client.send_message(message.channel, codeblock)
Ejemplo n.º 2
0
def update_server(components=None,
                  name=None,
                  vendor=None,
                  comments=None,
                  specification_url=None,
                  availability=None):
    server = Server.get(lambda s: s.name == name)

    if name is None:
        raise Exception('Server name is not specified')

    if vendor is not None:
        server.vendor = vendor

    if comments is not None:
        server.comments = comments

    if specification_url is not None:
        server.specification_url = \
        specification_url

    if availability is not None:
        server.availability = availability

    if components is not None:
        cmp = select(c for c in Component if c.name in components)[:]

        for c in cmp:
            server.components.add(c)
            c.servers.add(server)

    return server
Ejemplo n.º 3
0
def add_certification(server=None,
                      fuel_version=None,
                      date=datetime.now(),
                      comments=None):
    with db_session:
        if fuel_version is None:
            raise Exception('Fuel version is not specified')
        else:
            fuel_version = FuelVersion.get(lambda fv: fuel_version == fv.name)

        if server is None:
            raise Exception('Specify server name')

        server = Server.get(lambda s: s.name == server)

        if server is None:
            raise Exception('No such server in database')

        certification = Certification(server=server,
                                      fuel_version=fuel_version,
                                      date=date)

        if comments is not None:
            certification.comments = comments

        # establishing  connection between server and certification
        certification.server = server
        server.certifications.add(certification)

    return certification
Ejemplo n.º 4
0
def make_task(server_id, status):
    sleep(10)
    db.connect()
    try:
        server = Server.get(Server.server_id == server_id)
    except Server.DoesNotExist:
        db.close()
        return False
    server.status = status
    server.save()
    db.close()
    return True
Ejemplo n.º 5
0
    def delete(self, tenant_id, server_id):
        try:
            server = Server.get(Server.tenant_id == tenant_id, Server.server_id == server_id)
        except Server.DoesNotExist:
            self.write({'status': 'not_found'})
            return
        server.delete_instance()

        self.write({
            'id': int(server_id),
            'status': 'deleted',
        })
Ejemplo n.º 6
0
    def get(self, tenant_id, server_id):
        try:
            server = Server.get(Server.tenant_id == tenant_id, Server.server_id == server_id)
        except Server.DoesNotExist:
            self.write({'status': 'not_found'})
            return

        self.write({
            'id': server.server_id,
            'name': server.name,
            'status': server.status,
            'date_created': str(server.date_created),
        })
Ejemplo n.º 7
0
def update_followed_list(bot, update, is_follow=True, *_, **kwargs):
    try:
        server_obj_id = get_server(is_follow=is_follow, **kwargs)

        with db_session:
            server_obj = Server.get(id=server_obj_id)

            # save user
            user_name = update.message.from_user.first_name
            user_id = update.message.from_user.id
            now = datetime.datetime.now()
            user = User.get(chat_id=user_id)
            if user is None:
                user = User(
                    name=user_name,
                    chat_id=user_id,
                    active=False,
                    created=now,
                    last_msg=now,
                )
                if is_follow:
                    user.servers.add(server_obj)
            else:
                if is_follow:
                    user.servers.add(server_obj)
                else:
                    user.servers.remove(server_obj)
            commit()
            # user_servers_str = ', '.join([s.alias for s in user.servers]) if user is not None else ''

        cmd = 'will' if is_follow else 'will not'

        # send message
        msg = f'you {cmd} receive messages about {server_obj.alias} server status'
        try:
            bot.send_message(chat_id=update.message.chat_id, text=msg)
        except (BadRequest, Unauthorized):
            traceback.print_exc()

        # send status message
        # msg = f'you do\'t follow any servers' if user_servers_str == '' else f'now you follow to: {user_servers_str}'
        # bot.send_message(chat_id=update.message.chat_id, text=msg)

    except ValidationError as e:
        try:
            bot.send_message(chat_id=update.message.chat_id, text=str(e))
        except (BadRequest, Unauthorized):
            traceback.print_exc()

    except Exception:
        traceback.print_exc()
Ejemplo n.º 8
0
async def profile(message):
    server = Server.get(Server.sid == message.server.id)
    user = User.get(User.uid == message.author.id)
    lvl = LocalLevel.get((LocalLevel.user == user)
                         & (LocalLevel.server == server))
    req = ((8 * lvl.level) + await diff(lvl.level)) * await mxp(lvl.level)
    experience = f"{lvl.experience}/{req}"
    lines = [
        f"{'Level'.ljust(8)}{'Experience'.ljust(10)}",
        f"{str(lvl.level).ljust(8)}{experience.ljust(10)}"
    ]

    msg = '\n'.join(lines)

    await client.send_message(message.channel, f"```{msg}```")
Ejemplo n.º 9
0
async def add_role(message):
    # Adds an assignable role
    splitmsg = message.content.split()
    rolename = ' '.join(splitmsg[1:])
    role = discord.utils.get(message.server.roles, name=rolename)
    server = Server.get(Server.sid == message.server.id)
    r, created = Role.get_or_create(rid=role.id,
                                    defaults={
                                        'assignable': True,
                                        'server': server
                                    })
    if not created:
        r.assignable = True
        r.save()

    await reply(f"The {rolename} role is now assignable", message)
Ejemplo n.º 10
0
async def add_leader_role(message):
    # Adds a leaderboard role
    splitmsg = message.content.split()
    rolename = ' '.join(splitmsg[1:])
    role = discord.utils.get(message.server.roles, name=rolename)
    server = Server.get(Server.sid == message.server.id)
    r, created = Role.get_or_create(rid=role.id,
                                    defaults={
                                        'awardlevel': None,
                                        'leaderboard': True,
                                        'server': server
                                    })
    if not created:
        r.leaderboard = True
        r.save()

    await reply(
        f"The {rolename} role will now be given when a user enters"
        " the leaderboard", message)
Ejemplo n.º 11
0
async def add_reward(message):
    # Adds an reward role
    splitmsg = message.content.split()
    rolename = ' '.join(splitmsg[1:-1])
    level = splitmsg[-1]
    role = discord.utils.get(message.server.roles, name=rolename)
    server = Server.get(Server.sid == message.server.id)
    r, created = Role.get_or_create(rid=role.id,
                                    defaults={
                                        'awardlevel': level,
                                        'server': server
                                    })
    if not created:
        r.awardlevel = level
        r.save()

    await reply(
        f"The {rolename} role will now be given when a user"
        f" hits level {level}", message)
Ejemplo n.º 12
0
def echo_server_status(bot, server: dict, status: bool):
    _alias = server['alias']
    status_word = 'up' if status else 'down'
    text = f'{_alias} is {status_word} right now'

    # send to dev chat
    # if _alias == 'dev':
    #     try:
    #         bot.send_message(chat_id=DEV_CHAT_ID, text=text)
    #     except (BadRequest, Unauthorized):
    #         traceback.print_exc()

    # send to followers
    with db_session:
        for user in Server.get(alias=_alias).users:
            print(f'send to {user.name}: {text}')
            try:
                bot.send_message(chat_id=user.chat_id, text=text)
            except (BadRequest, Unauthorized):
                traceback.print_exc()
Ejemplo n.º 13
0
def get_server(is_follow=True, **kwargs):
    # get alias
    server_alias = kwargs['args'][0] if 'args' in kwargs and len(
        kwargs['args']) > 0 else None
    if not server_alias:
        cmd = 'follow' if is_follow else 'forget'
        with db_session:
            aliases = [s.alias for s in Server.select()]
        msg = f'correct syntax is "/{cmd} {{server_alias}}"\n' \
              f'where server_alias is one of {aliases}'
        raise ValidationError(msg)

    # validate alias
    with db_session:
        server_obj = Server.get(alias=server_alias)
        if server_obj is None:
            # noinspection PyTypeChecker
            server_aliases = [obj.alias for obj in select(s for s in Server)]
            msg = 'choice server_alias from: {}'.format(
                ', '.join(server_aliases))
            raise ValidationError(msg)

    return server_obj.id
Ejemplo n.º 14
0
async def announce_channel(message):
    server = Server.get(Server.sid == message.server.id)
    server.announce_channel = message.channel.id
    await reply(f"I will now do server level up announcements here.", message)
Ejemplo n.º 15
0
 def _load_server(self):
     """
     Load the server from the database
     :return: None
     """
     self.server = Server.get(name=self.config.server_name)
Ejemplo n.º 16
0
                continue
            if is_server_alive != server['prev_state']:
                echo_server_status(bot, server, is_server_alive)
            server['prev_state'] = is_server_alive
    except Exception:
        with open('/tmp/bot.log', 'w') as file:
            traceback.print_exc(file=file)


if __name__ == '__main__':

    print('main: init db')
    # init db
    with db_session:
        for alias, url in DEFAULT_SERVERS.items():
            obj = Server.get(alias=alias)
            if obj is None:
                Server(alias=alias, url=url)
        commit()

    print('main: init bot')
    # init bot
    updater = Updater(token=TOKEN)
    j = updater.job_queue
    dispatcher = updater.dispatcher

    print('main: regular send messages')
    # regular send messages to channel dev_idwell_ru
    j.run_repeating(callback_minute, TIMEOUT, first=0.0, context=None, name='test')

    print('main: define commands')