Esempio n. 1
0
    def set_items(self, call_dict):
        self.total_pages = len(call_dict) // MAX_ROWS + int(
            len(call_dict) % MAX_ROWS != 0)

        # Initialize the embeds array in case there are multiple messages
        self.embeds = []

        # Populate embed item dict
        crt_idx = 0  # total emoji index
        emb_str = ""  # embed string per page
        part_cnt = 1  # page count
        emoji_to_func = OrderedDict()  # dict of emojis for current chunk

        for key, val in call_dict.items():
            # Get the current emoji
            crt_emoji = SITEMS[crt_idx]

            emoji_to_func[crt_emoji] = (val, key)  # emoji -> (function, label)
            emb_str += "%s %s\n" % (crt_emoji, key)

            crt_idx += 1

            # If more than MAX_ROWS items have been added split it
            if crt_idx >= MAX_ROWS:
                self.embeds.append((
                    dutils.prepare_embed(
                        title="%s (part %d/%d)" %
                        (self.title, part_cnt, self.total_pages),
                        description=emb_str,
                        footer_txt=self.footer,
                    ),
                    emoji_to_func,
                ))
                crt_idx = 0
                emb_str = ""
                part_cnt += 1
                emoji_to_func = {}

        if emb_str != "":
            # Add final split OR whole list
            if part_cnt > 1:
                self.embeds.append((
                    dutils.prepare_embed(
                        title="%s (part %d/%d)" %
                        (self.title, part_cnt, self.total_pages),
                        description=emb_str,
                        footer_txt=self.footer,
                    ),
                    emoji_to_func,
                ))
            else:
                self.embeds.append((
                    dutils.prepare_embed(
                        title=self.title,
                        description=emb_str,
                        footer_txt=self.footer,
                    ),
                    emoji_to_func,
                ))
Esempio n. 2
0
async def goodreads_search(text, async_send_message):
    """
    <text> - Search for books on Goodreads.
    """
    items = []
    try:
        items = search(text)
    except Exception as e:
        return "Exception searching for data: " + str(e)

    if len(items) == 0:
        return "No results found."

    results = {}
    for item in items:
        results[item.title] = item.link

    embed = dutils.prepare_embed(
        title="Goodreads search",
        description=f"Result for {text}",
        fields=results,
        inline_fields=False,
    )

    await async_send_message(embed=embed)
Esempio n. 3
0
async def steamsearch(text, async_send_message):
    """
    <text> - Search steam for games.
    """
    items = []
    try:
        items = search_steam(text)
    except:
        return "Exception searching for data."

    if len(items) == 0:
        return "No results found."

    results = {}
    for item in items:
        results[item.name] = f"{item.link}"

    embed = dutils.prepare_embed(
        title="Steam search",
        description=f"Result for {text} - found {len(items)}",
        fields=results,
        inline_fields=False,
    )

    await async_send_message(embed=embed)
Esempio n. 4
0
async def steam(text, async_send_message):
    """
    <text or ID> - Search for a Steam game by name or ID.
    """
    items = []
    try:
        items = search_steam(text)
    except:
        return "Exception searching for data."

    if len(items) == 0:
        return "No results found."

    embed = dutils.prepare_embed(
        title="Steam data",
        description=f"Result for {text}",
        fields={
            "Name": items[0].name,
            "ID": items[0].gid,
            "Price": items[0].price,
            "Metascore": items[0].metascore,
            "Link": items[0].link,
        },
        inline_fields=True,
        image_url=items[0].image,
    )
    print(embed)

    await async_send_message(embed=embed)
Esempio n. 5
0
    async def send_msg(self):
        if len(self.urls) == 0:
            await self.async_send_message("No results found")
            return

        embed = None
        if self.images:
            embed = dutils.prepare_embed(
                title="Image search",
                description="Query: %s (result %d/%d)" %
                (self.search_term, self.crt_page + 1, len(self.urls)),
                image_url=self.urls[self.crt_page].image_url,
                footer_txt=self.footer,
            )
        else:
            embed = dutils.prepare_embed(
                title="Google search",
                description="Query: %s (result %d/%d)\n%s\n%s" % (
                    self.search_term,
                    self.crt_page + 1,
                    len(self.urls),
                    self.urls[self.crt_page].snippet,
                    self.urls[self.crt_page].link,
                ),
                thumbnail_url=self.urls[self.crt_page].image_thumb,
                footer_txt=self.footer,
            )

        new_message = self.msg
        try:
            updated_message = await self.async_send_message(embed=embed)
        except Exception as e:
            import traceback

            traceback.print_exc()
            return

        if updated_message:
            self.msg = updated_message

        if new_message is None:
            await self.msg.async_add_reaction(LARROW)
            await self.msg.async_add_reaction(RARROW)
Esempio n. 6
0
    def send_embed(
        self,
        title,
        description=None,
        fields=None,
        inline_fields=True,
        image_url=None,
        footer_txt=None,
        target=-1,
    ):
        em = dutils.prepare_embed(title, description, fields, inline_fields,
                                  image_url, footer_txt)

        asyncio.run_coroutine_threadsafe(
            self.async_send_message(embed=em, target=target), bot.loop)
Esempio n. 7
0
async def goodreads(text, async_send_message):
    """
    <text> - List first goodreads result.
    """
    # Do a search first
    try:
        items = search(text)
    except Exception as e:
        return "Exception searching for data: " + str(e)

    if len(items) == 0:
        return "No results found."

    # Go to the first result
    item = None
    try:
        item = getbook(items[0].link)
    except Exception as e:
        return "Exception searching for data: " + str(e)

    if item == None:
        return "No results found."

    embed = dutils.prepare_embed(
        title="Goodreads book",
        description=f"Result for {text}",
        fields={
            "Title": item.title,
            "Rating": item.rating,
            "Link": item.link,
            "Description": item.description,
        },
        image_url=item.cover,
        inline_fields=False,
    )

    await async_send_message(embed=embed)
Esempio n. 8
0
async def list_polls(async_send_message, storage, server):
    """
    Lists active polls
    """
    fields = {}

    if server.id not in active_polls:
        active_polls[server.id] = []

    for poll in active_polls[server.id]:
        if not poll.is_active:
            continue

        fields[poll.title] = poll.get_link()

    if len(fields.keys()) == 0:
        fields["No active polls"] = "Create a poll using `.create_poll`"

    embed = dutils.prepare_embed(title="Active polls",
                                 description="",
                                 fields=fields,
                                 inline_fields=None)

    await async_send_message(embed=embed)