Beispiel #1
0
async def select_guild(bot, message, msg):
    guilds = {}

    user_guilds = await get_user_guilds(bot, message.author)
    if user_guilds is None:
        embed = Embed(
            f"Please [click here]({bot.config.BASE_URI}/login?redirect=/authorized) to verify. "
            "This will allow the bot to see your servers and is required for the bot to function. "
            "Then, close the page and return back here."
        )
        await msg.edit(embed)

        await bot.state.set(
            f"user_select:{message.author.id}",
            {
                "message": message._data,
                "msg": msg._data,
            },
        )

        return

    for guild in user_guilds:
        guild = await bot.get_guild(guild)
        if guild is None:
            continue

        channel = None
        for text_channel in await guild.text_channels():
            if is_modmail_channel(text_channel, message.author.id):
                channel = text_channel

        if not channel:
            guilds[str(guild.id)] = (guild.name, False)
        else:
            guilds[str(guild.id)] = (guild.name, True)

    if len(guilds) == 0:
        await message.channel.send(ErrorEmbed("Oops, something strange happened. No server found."))
        return

    embeds = []

    for chunk in [list(guilds.items())[i : i + 10] for i in range(0, len(guilds), 10)]:
        embed = Embed(
            "Select Server",
            "Please select the server you want to send this message to. You can do so by reacting "
            "with the corresponding emote.",
        )
        embed.set_footer("Use the reactions to flip pages.")

        for guild, value in chunk:
            embed.add_field(
                f"{len(embed.fields) + 1}: {value[0]}",
                f"{'Create a new ticket.' if value[1] is False else 'Existing ticket.'}\n"
                f"Server ID: {guild}",
            )

        embeds.append(embed)

    await msg.edit(embeds[0])

    await msg.add_reaction("◀️")
    await msg.add_reaction("▶️")
    for reaction in ["1⃣", "2⃣", "3⃣", "4⃣", "5⃣", "6⃣", "7⃣", "8⃣", "9⃣", "🔟"][
        : len(embeds[0].fields)
    ]:
        await msg.add_reaction(reaction)

    await bot.state.set(
        f"reaction_menu:{msg.channel.id}:{msg.id}",
        {
            "kind": "selection",
            "end": int(time.time()) + 180,
            "data": {
                "msg": message._data,
                "page": 0,
                "all_pages": [embed.to_dict() for embed in embeds],
            },
        },
    )
    await bot.state.sadd("reaction_menu_keys", f"reaction_menu:{msg.channel.id}:{msg.id}")
Beispiel #2
0
    async def select_guild(self, message, msg=None):
        guilds = {}

        for guild in await self.bot.state.smembers(f"user:{message.author.id}"
                                                   ):
            guild = await self.bot.get_guild(int(guild))

            channel = None
            for text_channel in await guild.text_channels():
                if tools.is_modmail_channel(text_channel, message.author.id):
                    channel = text_channel

            if not channel:
                guilds[str(guild.id)] = (guild.name, False)
            else:
                guilds[str(guild.id)] = (guild.name, True)

        if len(guilds) == 0:
            await message.channel.send(embed=ErrorEmbed(
                description=
                "Oops, no server found. Please change your Discord status to online and try again."
            ))
            return

        embeds = []

        for chunk in [
                list(guilds.items())[i:i + 10]
                for i in range(0, len(guilds), 10)
        ]:
            embed = Embed(
                title="Select Server",
                description=
                "Please select the server you want to send this message to. You can do so by reacting "
                "with the corresponding emote.",
            )
            embed.set_footer(text="Use the reactions to flip pages.")

            for guild, value in chunk:
                embed.add_field(
                    name=f"{len(embed.fields) + 1}: {value[0]}",
                    value=
                    f"{'Create a new ticket.' if value[1] is False else 'Existing ticket.'}\nServer ID: {guild}",
                )

            embeds.append(embed)

        if msg:
            msg = await msg.edit(embed=embeds[0])
        else:
            msg = await message.channel.send(embed=embeds[0])

        await msg.add_reaction("◀")
        await msg.add_reaction("▶")
        for reaction in [
                "1⃣", "2⃣", "3⃣", "4⃣", "5⃣", "6⃣", "7⃣", "8⃣", "9⃣", "🔟"
        ][:len(embeds[0].fields)]:
            await msg.add_reaction(reaction)

        await self.bot.state.sadd(
            "reaction_menus",
            {
                "kind": "selection",
                "channel": msg.channel.id,
                "message": msg.id,
                "end": int(time.time()) + 180,
                "data": {
                    "msg": message._data,
                    "page": 0,
                    "all_pages": [embed.to_dict() for embed in embeds],
                },
            },
        )