Exemplo n.º 1
0
 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')
Exemplo n.º 2
0
 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()
Exemplo n.º 3
0
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')
Exemplo n.º 4
0
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]}
Exemplo n.º 5
0
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)
    ]
Exemplo n.º 6
0
    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)
Exemplo n.º 7
0
 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)
Exemplo n.º 8
0
    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)
Exemplo n.º 9
0
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]
Exemplo n.º 10
0
 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)
     ]
Exemplo n.º 11
0
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}'
Exemplo n.º 12
0
    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)
Exemplo n.º 13
0
    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)
Exemplo n.º 14
0
    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)
Exemplo n.º 15
0
    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
Exemplo n.º 16
0
class LeaderSkillEmoji:
    home = emoji_buttons['home']
    left = char_to_emoji('l')
    right = char_to_emoji('r')
Exemplo n.º 17
0
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,
        }
Exemplo n.º 18
0
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']