예제 #1
0
        def make_page(chunk, page_num):
            style = table.Style('{:>}  {:<}  {:<}  {:<}')
            t = table.Table(style)
            t += table.Header('#', 'Name', 'Handle', 'Rating')
            t += table.Line()
            for index, (member, handle, rating) in enumerate(chunk):
                rating_str = f'{rating} ({rating2rank(rating).title_abbr})'

                handlestr = 'Unknown'
                if (handle is not None):
                    handlestr = handle
                t += table.Data(_PER_PAGE * page_num + index + 1,
                                f'{member.display_name}', handlestr,
                                rating_str)

            table_str = f'```\n{t}\n```'
            embed = discord_common.cf_color_embed(description=table_str)
            return 'List of duelists', embed
예제 #2
0
    def _make_standings_pages(self,
                              contest,
                              problem_indices,
                              handle_standings,
                              deltas=None):
        pages = []
        handle_standings_chunks = paginator.chunkify(handle_standings,
                                                     _STANDINGS_PER_PAGE)
        num_chunks = len(handle_standings_chunks)
        delta_chunks = (paginator.chunkify(deltas, _STANDINGS_PER_PAGE)
                        if deltas else [None] * num_chunks)

        if contest.type == "CF":
            get_table = functools.partial(self._get_cf_or_ioi_standings_table,
                                          mode="cf")
        elif contest.type == "ICPC":
            get_table = self._get_icpc_standings_table
        elif contest.type == "IOI":
            get_table = functools.partial(self._get_cf_or_ioi_standings_table,
                                          mode="ioi")
        else:
            assert False, f"Unexpected contest type {contest.type}"

        num_pages = 1
        for handle_standings_chunk, delta_chunk in zip(handle_standings_chunks,
                                                       delta_chunks):
            header_style, body_style, header, body = get_table(
                problem_indices, handle_standings_chunk, delta_chunk)
            t = table.Table(table.Style(header=header_style, body=body_style))
            t += table.Header(*header)
            t += table.Line("\N{EM DASH}")
            for row in body:
                t += table.Data(*row)
            t += table.Line("\N{EM DASH}")
            page_num_footer = (f" # Page: {num_pages} / {num_chunks}"
                               if num_chunks > 1 else "")

            # We use yaml to get nice colors in the ranklist.
            content = f"```yaml\n{t}\n{page_num_footer}```"
            pages.append((content, None))
            num_pages += 1

        return pages
예제 #3
0
def _make_pages(users):
    chunks = paginator.chunkify(users, _HANDLES_PER_PAGE)
    pages = []
    done = 0

    style = table.Style('{:>}  {:<}  {:<}  {:<}')
    for chunk in chunks:
        t = table.Table(style)
        t += table.Header('#', 'Name', 'Handle', 'Rating')
        t += table.Line()
        for i, (member, handle, rating) in enumerate(chunk):
            rank = cf.rating2rank(rating)
            rating_str = 'N/A' if rating is None else str(rating)
            t += table.Data(i + done, member.display_name, handle,
                            f'{rating_str} ({rank.title_abbr})')
        table_str = '```\n' + str(t) + '\n```'
        embed = discord_common.cf_color_embed(description=table_str)
        pages.append(('Handles of server members', embed))
        done += len(chunk)
    return pages
예제 #4
0
파일: handles.py 프로젝트: Vidit-Jain/TLE
def _make_pages(users, title):
    chunks = paginator.chunkify(users, _HANDLES_PER_PAGE)
    pages = []
    done = 0

    style = table.Style("{:>}  {:<}  {:<}  {:<}")
    for chunk in chunks:
        t = table.Table(style)
        t += table.Header("#", "Name", "Handle", "Rating")
        t += table.Line()
        for i, (member, handle, rating) in enumerate(chunk):
            name = member.display_name
            if len(name) > _NAME_MAX_LEN:
                name = name[: _NAME_MAX_LEN - 1] + "…"
            rank = cf.rating2rank(rating)
            rating_str = "N/A" if rating is None else str(rating)
            t += table.Data(i + done, name, handle, f"{rating_str} ({rank.title_abbr})")
        table_str = "```\n" + str(t) + "\n```"
        embed = discord_common.cf_color_embed(description=table_str)
        pages.append((title, embed))
        done += len(chunk)
    return pages
예제 #5
0
def _make_pages_gudgitters(users, title):
    chunks = paginator.chunkify(users, _HANDLES_PER_PAGE)
    pages = []
    done = 0

    style = table.Style('{:>}  {:<}  {:<}  {:<}')
    for chunk in chunks:
        t = table.Table(style)
        t += table.Header('#', 'Name', 'Handle', 'Rating')
        t += table.Line()
        for i, (member, handle, rating) in enumerate(chunk):
            name = member
            if len(name) > _NAME_MAX_LEN:
                name = name[:_NAME_MAX_LEN - 1] + '…'
            rank = cf.rating2rank(rating)
            rating_str = 'N/A' if rating is None else str(rating)
            t += table.Data(i + done, name, handle, f'{rating_str}')
        table_str = '```\n' + str(t) + '\n```'
        embed = discord_common.cf_color_embed(description=table_str)
        pages.append((title, embed))
        done += len(chunk)
    return pages
예제 #6
0
    async def gudgitters(self, ctx):
        """Show the list of users of gitgud with their scores."""
        res = cf_common.user_db.get_gudgitters()
        res.sort(key=lambda r: r[1], reverse=True)

        style = table.Style('{:>}  {:<}')
        t = table.Table(style)
        t += table.Header('#', 'Name')
        t += table.Line()
        index = 0
        for user_id, score in res:
            member = ctx.guild.get_member(int(user_id))
            if member is None:
                continue
            if score > 0:
                handle_display = f'{member.display_name} ({score})'
                t += table.Data(index, handle_display)
                index += 1
        if index > 0:
            msg = '```\n' + str(t) + '\n```'
        else:
            msg = '```No one has completed a gitgud challenge, send ;gitgud to request and ;gotgud to mark it as complete```'
        await ctx.send(msg)
예제 #7
0
파일: cses.py 프로젝트: pantsudestroyer/TLE
    def leaderboard(self, placings, num):
        leaderboard = sorted(
            ((k, score(v)) for k, v in placings.items() if k != 'N/A'),
            key=lambda x: x[1],
            reverse=True)

        if not leaderboard:
            return 'Failed to load :<'

        top = leaderboard[:num]

        header = ' 1st 2nd 3rd 4th 5th '.split(' ')

        style = table.Style(header='{:>}   {:>} {:>} {:>} {:>} {:>}   {:>}',
                            body='{:>} | {:>} {:>} {:>} {:>} {:>} | {:>} pts')

        t = table.Table(style)
        t += table.Header(*header)

        for user, points in top:
            hist = [placings[user].count(i + 1) for i in range(5)]
            t += table.Data(user, *hist, points)

        return str(t)