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, ))
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)
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)
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)
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)
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)
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)
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)