def __init__(self, bot, *args, **kwargs): super().__init__(*args, **kwargs) self.bot = bot self.card_data = [] self.menu = Menu(bot) self.regular_emoji = char_to_emoji('r') self.idol_emoji = char_to_emoji('i')
async def send_survey_after(self, ctx, query, result): sm = await self.config.user(ctx.author).survey_mode() sms = [1, await self.config.sometimes_perc() / 100, 0][sm] if random.random() < sms: params = urllib.parse.urlencode({ 'usp': 'pp_url', 'entry.154088017': query, 'entry.173096863': result }) url = "https://docs.google.com/forms/d/e/1FAIpQLSf66fE76epgslagdYteQR68HZAhxM43bmgsvurEzmHKsbaBDA/viewform?" + params await asyncio.sleep(1) userres = await tsutils.confirm_message( ctx, "Was this the monster you were looking for?", yemoji=char_to_emoji('y'), nemoji=char_to_emoji('n')) if userres is True: await self.config.good.set(await self.config.good() + 1) elif userres is False: await self.config.bad.set(await self.config.bad() + 1) m = await ctx.send( f"Oh no! You can help the Tsubaki team give better results" f" by filling out this survey!\nPRO TIP: Use `{ctx.prefix}idset" f" survey` to adjust how often this shows.\n\n<{url}>") await asyncio.sleep(15) await m.delete()
class TransformInfoEmoji: home = emoji_buttons['home'] down = '\N{DOWN-POINTING RED TRIANGLE}' up = '\N{UP-POINTING RED TRIANGLE}' one = char_to_emoji('1') two = char_to_emoji('2') three = char_to_emoji('3') four = char_to_emoji('4') five = char_to_emoji('5') six = char_to_emoji('6') seven = char_to_emoji('7') eight = char_to_emoji('8') nine = char_to_emoji('9') ten = char_to_emoji('10')
class IdMenuPanes: INITIAL_EMOJI = '\N{HOUSE BUILDING}' DATA = { IdMenu.respond_with_left: ('\N{BLACK LEFT-POINTING TRIANGLE}', None), IdMenu.respond_with_right: ('\N{BLACK RIGHT-POINTING TRIANGLE}', None), IdMenu.respond_with_current_id: ('\N{HOUSE BUILDING}', IdMenuPaneNames.id), IdMenu.respond_with_evos: (char_to_emoji('e'), IdMenuPaneNames.evos), IdMenu.respond_with_mats: ('\N{MEAT ON BONE}', IdMenuPaneNames.materials), IdMenu.respond_with_picture: ('\N{FRAME WITH PICTURE}', IdMenuPaneNames.pic), IdMenu.respond_with_pantheon: ('\N{CLASSICAL BUILDING}', IdMenuPaneNames.pantheon), IdMenu.respond_with_otherinfo: ('\N{SCROLL}', IdMenuPaneNames.otherinfo), } @classmethod def emoji_names(cls): return [v[0] for k, v in cls.DATA.items()] @classmethod def transitions(cls): return {v[0]: k for k, v in cls.DATA.items()} @classmethod def pane_types(cls): return {v[1]: k for k, v in cls.DATA.items() if v[1]}
def _monster_list(monsters): if not len(monsters): return [] return [ MonsterHeader.short_with_emoji(mon, link=True, prefix=char_to_emoji(i)) for i, mon in enumerate(monsters) ]
async def _do_evolistmenu(self, ctx, sm): DGCOG = self.bot.get_cog("Dadguide") db_context = DGCOG.database monsters = db_context.graph.get_alt_monsters_by_id(sm.monster_id) monsters.sort(key=lambda x: x.monster_id) emoji_to_embed = OrderedDict() menu = IdMenu(ctx, db_context=db_context, allowed_emojis=self.get_emojis()) starting_menu_emoji = None for idx, m in enumerate(monsters): chars = "0123456789\N{KEYCAP TEN}ABCDEFGHI" if idx > 19: await ctx.send( "There are too many evos for this monster to display. Try using `{}evolist`." .format(ctx.prefix)) return else: emoji = char_to_emoji(chars[idx]) emoji_to_embed[emoji] = await menu.make_embed(m) if m.monster_id == sm.monster_id: starting_menu_emoji = emoji return await self._do_menu(ctx, starting_menu_emoji, EmojiUpdater(emoji_to_embed), timeout=60)
async def do_menu(self, ctx, c): emoji_to_embed = OrderedDict() for idx, image_info in enumerate(c['images']): emoji = char_to_emoji(str(idx)) emoji_to_embed[emoji] = make_card_embed(c, idx) starting_menu_emoji = list(emoji_to_embed.keys())[0] return await self._do_menu(ctx, starting_menu_emoji, emoji_to_embed)
def __init__(self, bot, *args, **kwargs): super().__init__(*args, **kwargs) self.bot = bot self.settings = PadInfoSettings("padinfo") self.index_all = None self.index_na = None self.index_jp = None self.index_lock = asyncio.Lock() self.menu = Menu(bot) # These emojis are the keys into the idmenu submenus self.id_emoji = '\N{HOUSE BUILDING}' self.evo_emoji = char_to_emoji('e') self.mats_emoji = char_to_emoji('m') self.ls_emoji = '\N{HOUSE BUILDING}' self.left_emoji = char_to_emoji('l') self.right_emoji = char_to_emoji('r') self.pantheon_emoji = '\N{CLASSICAL BUILDING}' self.skillups_emoji = '\N{MEAT ON BONE}' self.pic_emoji = '\N{FRAME WITH PICTURE}' self.other_info_emoji = '\N{SCROLL}' self.first_monster_emoji = '\N{BLACK LEFT-POINTING DOUBLE TRIANGLE}' self.previous_monster_emoji = '\N{BLACK LEFT-POINTING TRIANGLE}' self.next_monster_emoji = '\N{BLACK RIGHT-POINTING TRIANGLE}' self.last_monster_emoji = '\N{BLACK RIGHT-POINTING DOUBLE TRIANGLE}' self.remove_emoji = self.menu.emoji['no'] self.historic_lookups_file_path = _data_file('historic_lookups.json') self.historic_lookups = safe_read_json(self.historic_lookups_file_path) self.historic_lookups_file_path_id2 = _data_file( 'historic_lookups_id2.json') self.historic_lookups_id2 = safe_read_json( self.historic_lookups_file_path_id2) self.config = Config.get_conf(self, identifier=9401770) self.config.register_user(survey_mode=0, color=None) self.config.register_global(sometimes_perc=20, good=0, bad=0, do_survey=False)
class MonsterListMenuPanes: INITIAL_EMOJI = '\N{HOUSE BUILDING}' DATA = { MonsterListMenu.respond_with_monster_list: ('\N{HOUSE BUILDING}', IdMenuPaneNames.evos), MonsterListMenu.respond_with_0: (char_to_emoji('0'), IdMenuPaneNames.id), MonsterListMenu.respond_with_1: (char_to_emoji('1'), IdMenuPaneNames.id), MonsterListMenu.respond_with_2: (char_to_emoji('2'), IdMenuPaneNames.id), MonsterListMenu.respond_with_3: (char_to_emoji('3'), IdMenuPaneNames.id), MonsterListMenu.respond_with_4: (char_to_emoji('4'), IdMenuPaneNames.id), MonsterListMenu.respond_with_5: (char_to_emoji('5'), IdMenuPaneNames.id), MonsterListMenu.respond_with_6: (char_to_emoji('6'), IdMenuPaneNames.id), MonsterListMenu.respond_with_7: (char_to_emoji('7'), IdMenuPaneNames.id), MonsterListMenu.respond_with_8: (char_to_emoji('8'), IdMenuPaneNames.id), MonsterListMenu.respond_with_9: (char_to_emoji('9'), IdMenuPaneNames.id), MonsterListMenu.respond_with_10: ('\N{KEYCAP TEN}', IdMenuPaneNames.id), } @classmethod def emoji_names(cls): return [v[0] for k, v in cls.DATA.items()] @classmethod def transitions(cls): return {v[0]: k for k, v in cls.DATA.items()} @classmethod def pane_types(cls): return {v[1]: k for k, v in cls.DATA.items() if v[1]} @staticmethod def get_initial_reaction_list(number_of_evos: int): return MonsterListMenuPanes.emoji_names()[:number_of_evos + 1]
def _monster_list(monsters, current_index): if not len(monsters): return [] return [ MonsterHeader.short_with_emoji(mon, link=SeriesScrollView._is_linked( i, current_index), prefix=char_to_emoji(i)) for i, mon in enumerate(monsters) ]
class IdMenuEmoji: left = '\N{BLACK LEFT-POINTING TRIANGLE}' right = '\N{BLACK RIGHT-POINTING TRIANGLE}' home = '\N{HOUSE BUILDING}' evos = char_to_emoji('E') mats = '\N{MEAT ON BONE}' pic = '\N{FRAME WITH PICTURE}' pantheon = '\N{CLASSICAL BUILDING}' otherinfo = '\N{SCROLL}' refresh = "\N{ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS}" delete = '\N{CROSS MARK}'
async def emoji(self, ctx, *, text): """Speak the provided text as emojis, deleting the original request""" await ctx.message.delete() new_msg = "" for char in text: if char.isalpha(): new_msg += char_to_emoji(char) + ' ' elif char == ' ': new_msg += ' ' elif char.isspace(): new_msg += char if len(new_msg): await ctx.send(new_msg)
def __init__(self, bot, *args, **kwargs): super().__init__(*args, **kwargs) self.bot = bot self.settings = PadInfoSettings("padinfo") self.index_all = None self.index_na = None self.index_jp = None self.index_lock = asyncio.Lock() self.menu = Menu(bot) # These emojis are the keys into the idmenu submenus self.id_emoji = '\N{INFORMATION SOURCE}' self.evo_emoji = char_to_emoji('e') self.mats_emoji = char_to_emoji('m') self.ls_emoji = '\N{INFORMATION SOURCE}' self.left_emoji = char_to_emoji('l') self.right_emoji = char_to_emoji('r') self.pantheon_emoji = '\N{CLASSICAL BUILDING}' self.skillups_emoji = '\N{MEAT ON BONE}' self.pic_emoji = '\N{FRAME WITH PICTURE}' self.other_info_emoji = '\N{SCROLL}' self.first_monster_emoji = '\N{BLACK LEFT-POINTING DOUBLE TRIANGLE}' self.previous_monster_emoji = '\N{BLACK LEFT-POINTING TRIANGLE}' self.next_monster_emoji = '\N{BLACK RIGHT-POINTING TRIANGLE}' self.last_monster_emoji = '\N{BLACK RIGHT-POINTING DOUBLE TRIANGLE}' self.remove_emoji = self.menu.emoji['no'] self.historic_lookups_file_path = _data_file('historic_lookups.json') self.historic_lookups = safe_read_json(self.historic_lookups_file_path) self.historic_lookups_file_path_id2 = _data_file( 'historic_lookups_id2.json') self.historic_lookups_id2 = safe_read_json( self.historic_lookups_file_path_id2)
async def _do_evolistmenu(self, ctx, sm): monsters = sm.alt_evos monsters.sort(key=lambda m: m.monster_id) emoji_to_embed = OrderedDict() for idx, m in enumerate(monsters): emoji = char_to_emoji(str(idx)) emoji_to_embed[emoji] = monsterToEmbed(m, self.get_emojis()) if m.monster_id == sm.monster_id: starting_menu_emoji = emoji return await self._do_menu(ctx, starting_menu_emoji, EmojiUpdater(emoji_to_embed), timeout=60)
async def emojireact(self, ctx, *, text): """React to a message with emoji""" EXTRA = { "a": ["\N{NEGATIVE SQUARED LATIN CAPITAL LETTER A}"], "b": ["\N{NEGATIVE SQUARED LATIN CAPITAL LETTER B}"], "o": ["\N{NEGATIVE SQUARED LATIN CAPITAL LETTER O}"], } *text, message_t = text.split() try: message = await commands.MessageConverter().convert(ctx, message_t) text = "".join(text) except: message = None text = "".join(text + [message_t]) if message is None: message = (await ctx.channel.history(limit=2).flatten())[1] text = re.sub(r'[^a-z0-9]', '', text.lower()) if len(message.reactions) + len(text) > 20: await ctx.send("I don't have enough room to spell this.") return for char in text: if text.count(char) > len(EXTRA.get(char, [])) + 1: await ctx.send("It is not possible to make this using emoji.") return await ctx.message.delete() used = "" for char in text: emote = ([char_to_emoji(char)] + EXTRA.get(char, []))[used.count(char)] await message.add_reaction(emote) used += char
class LeaderSkillEmoji: home = emoji_buttons['home'] left = char_to_emoji('l') right = char_to_emoji('r')
from discordmenu.embed.emoji import EmbedMenuEmojiConfig from discordmenu.embed.menu import EmbedMenu, EmbedControl from discordmenu.emoji.emoji_cache import emoji_cache from discordmenu.reaction_filter import ValidEmojiReactionFilter, NotPosterEmojiReactionFilter, \ MessageOwnerReactionFilter, FriendReactionFilter, BotAuthoredMessageReactionFilter from tsutils import char_to_emoji from padinfo.view.id import IdView from padinfo.view.leader_skill import LeaderSkillView from padinfo.view_state.id import IdViewState from padinfo.view_state.leader_skill import LeaderSkillViewState if TYPE_CHECKING: pass emoji_button_names = ['\N{HOUSE BUILDING}', char_to_emoji('l'), char_to_emoji('r'), '\N{CROSS MARK}'] menu_emoji_config = EmbedMenuEmojiConfig(delete_message='\N{CROSS MARK}') class LeaderSkillMenu: INITIAL_EMOJI = emoji_button_names[0] MENU_TYPE = 'LeaderSkill' @staticmethod def menu(original_author_id, friend_ids, bot_id): transitions = { LeaderSkillMenu.INITIAL_EMOJI: LeaderSkillMenu.respond_to_house, emoji_button_names[1]: LeaderSkillMenu.respond_to_l, emoji_button_names[2]: LeaderSkillMenu.respond_to_r, }
class MonsterListEmoji: delete = '\N{CROSS MARK}' home = emoji_buttons['home'] prev_page = '\N{BLACK LEFT-POINTING DOUBLE TRIANGLE}' prev_mon = '\N{BLACK LEFT-POINTING TRIANGLE}' next_mon = '\N{BLACK RIGHT-POINTING TRIANGLE}' next_page = '\N{BLACK RIGHT-POINTING DOUBLE TRIANGLE}' zero = char_to_emoji('0') one = char_to_emoji('1') two = char_to_emoji('2') three = char_to_emoji('3') four = char_to_emoji('4') five = char_to_emoji('5') six = char_to_emoji('6') seven = char_to_emoji('7') eight = char_to_emoji('8') nine = char_to_emoji('9') ten = char_to_emoji('10') refresh = '\N{ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS}' reset = emoji_buttons['reset']