Example #1
0
    async def on_raw_reaction_add(self, emoji: discord.PartialEmoji,
                                  message_id: int, channel_id: int,
                                  user_id: int):
        """
        Event handler for long term reaction watching.
        :param discord.PartialReactionEmoji emoji:
        :param int message_id:
        :param int channel_id:
        :param int user_id:
        :return:
        """
        tracker = await self.config.srtracker()

        if str(message_id) not in tracker:
            return

        log_channel = self._get_channel_from_id(390927071553126402)

        # await log_channel.send("Message ID: "+str(message_id)+" was just reacted to")

        tracker = tracker[str(message_id)]

        guild = self.bot.get_guild(tracker["GUILDID"])
        member = guild.get_member(user_id)
        if member.bot:
            return

        if tracker["MID"] != (await self._parseuser(guild, tracker["TID"],
                                                    member.id)):
            message = (await self._get_message_from_id(guild, message_id))
            await message.remove_reaction(emoji, member)
            return

        channel = guild.get_channel(channel_id)
        message = await channel.get_message(message_id)

        if emoji.is_custom_emoji():
            emoji_id = emoji.id
        else:
            emoji_id = emoji.name

        wld = [(await self.config.win()), (await self.config.loss()),
               (await self.config.dispute())]
        if emoji_id not in wld:  # Not sure if this works # It does
            await message.remove_reaction(emoji, member)
            return

        if emoji_id == wld[0]:
            await self._report_win()
            await log_channel.send("Message ID: " + str(message_id) +
                                   " was reporting a win")
        if emoji_id == wld[1]:
            await self._report_loss()
            await log_channel.send("Message ID: " + str(message_id) +
                                   " was reporting a loss")
        if emoji_id == wld[2]:
            await self._report_dispute(guild, tracker["TID"], tracker["MID"])
            await log_channel.send("Message ID: " + str(message_id) +
                                   " was reporting a dispute")
Example #2
0
 async def check_add_role(self, emoji: discord.PartialEmoji, message_id: int, channel_id: int, user_id: int):
     message = self.get_from_message_cache(channel_id, message_id)
     if message is not None:
         guild = message.guild
         emoji_str = str(emoji.id) if emoji.is_custom_emoji() else emoji.name
         role = self.get_from_cache(guild.id, channel_id, message_id, emoji_str)
         member = guild.get_member(user_id)
         if member is not None and member != guild.me and role is not None:
             await self.add_role_queue(member, role, True,
                                       linked_roles=self.get_link(guild.id, channel_id, message_id))
Example #3
0
 async def steal_emoji(self, ctx, emoji: discord.PartialEmoji, name=None):
     """Copy an emoji to the server
     A new name can be provided, otherwise the name is copied
     Example:
     %emoji steal <:meowpuffyblush:876190347137548288>
     """
     if not emoji.is_custom_emoji():
         return await ctx.send(f'That is not a valid emoji')
     url = emoji.url
     emoji_name = name or emoji.name
     await self.create_emoji(ctx, emoji_name, url)
Example #4
0
 async def check_remove_role(self, emoji: discord.PartialEmoji, message_id: int, channel_id: int, user_id: int):
     message = self.get_from_message_cache(channel_id, message_id)
     if message is not None:
         guild = message.guild
         if user_id == guild.me.id:  # Safeguard in case a mod removes the bot's reaction by accident
             await message.add_reaction(emoji)
         else:
             emoji_str = str(emoji.id) if emoji.is_custom_emoji() else emoji.name
             member = guild.get_member(user_id)
             role = self.get_from_cache(guild.id, channel_id, message_id, emoji_str)
             if role is not None:
                 await self.add_role_queue(member, role, False)
Example #5
0
    async def set_emoji(self, ctx, emo: discord.PartialEmoji):
        context.new_guild_check(ctx.guild.id)

        if ctx.message.author.guild_permissions.administrator:
            if emo.is_custom_emoji():
                context.guilds[ctx.guild.id].emoji = str(emo)
                await ctx.send("El nuevo emoji es " +
                               str(context.guilds[ctx.guild.id].emoji))
                await ctx.message.add_reaction(
                    context.guilds[ctx.guild.id].emoji)
                context.save()
        else:
            await ctx.send("Solo lo puede ocupar un administrador")
            await ctx.message.add_reaction(context.guilds[ctx.guild.id].emoji)
Example #6
0
 async def check_remove_role(
     self, emoji: discord.PartialEmoji, message_id: int, channel_id: int, user_id: int
 ):
     message = self.get_from_message_cache(channel_id, message_id)
     if message is not None:
         guild = message.guild
         if (
             user_id == guild.me.id
         ):  # Safeguard in case a mod removes the bot's reaction by accident
             await message.add_reaction(emoji)
         else:
             emoji_str = str(emoji.id) if emoji.is_custom_emoji() else emoji.name
             member = guild.get_member(user_id)
             role = self.get_from_cache(guild.id, channel_id, message_id, emoji_str)
             if role is not None:
                 await self.add_role_queue(member, role, False)
Example #7
0
 async def check_add_role(
     self, emoji: discord.PartialEmoji, message_id: int, channel_id: int, user_id: int
 ):
     message = self.get_from_message_cache(channel_id, message_id)
     if message is not None:
         guild = message.guild
         emoji_str = str(emoji.id) if emoji.is_custom_emoji() else emoji.name
         role = self.get_from_cache(guild.id, channel_id, message_id, emoji_str)
         member = guild.get_member(user_id)
         if member is not None and member != guild.me and role is not None:
             await self.add_role_queue(
                 member,
                 role,
                 True,
                 linked_roles=self.get_link(guild.id, channel_id, message_id),
             )
Example #8
0
    async def on_raw_reaction_add(self, emoji: discord.PartialEmoji,
                                  message_id: int, channel_id: int,
                                  user_id: int):
        """
        Event handler for long term reaction watching.

        :param discord.PartialReactionEmoji emoji:
        :param int message_id:
        :param int channel_id:
        :param int user_id:
        :return:
        """
        if emoji.is_custom_emoji():
            emoji_id = emoji.id
        else:
            emoji_id = emoji.name

        has_reactrestrict, combos = await self.has_reactrestrict_combo(
            message_id)

        if not has_reactrestrict:
            return

        try:
            member = self._get_member(channel_id, user_id)
        except LookupError:
            return

        if member.bot:
            return

        if await self.bot.cog_disabled_in_guild(self, member.guild):
            return

        try:
            roles = [self._get_role(member.guild, c.role_id) for c in combos]
        except LookupError:
            return

        for apprrole in roles:
            if apprrole in member.roles:
                return

        message = await self._get_message_from_channel(channel_id, message_id)
        await message.remove_reaction(emoji, member)
Example #9
0
async def emo(ctx, arg, meo: discord.PartialEmoji):
    print('Была введена строчка: ' + arg)
    arg = str.lower(arg)
    if meo.is_custom_emoji():
        await ctx.channel.send('Ждите...')
        url_pic = str(meo.url)
        # Скачиваем изображение png
        with open('pic.png', 'wb') as handle:
            response = requests.get(url_pic, stream=True)
            if not response.ok:
                print(response)
            for block in response.iter_content(1024):
                if not block:
                    break
                handle.write(block)

        # Открываем изображение "пиксель"
        pic = Image.open('pic.png')
        w_pic = pic.width  # Ширина изображения "пикселя"
        h_pic = pic.height  # Высота изображения "пикселя"
        width = (len(arg) -
                 1) * w_pic  # Начальная ширина итогового изображения
        height = 0  # Начальная высота итогового изображения
        height_cells = 0  # Высота итогового изображения в "пикселях"
        # Определяем размер итогового изображения
        for el in arg:
            if el in dic.keys():
                li2 = dic.get(el)
                width = width + (int(li2[0]) * w_pic)
                if height < int(li[1]) * h_pic:
                    height = int(li2[1]) * h_pic
                    height_cells = int(li2[1])
        result = Image.new('RGBA', (width, height),
                           (0, 0, 0, 0))  # Создаем итоговое пустое изображение
        # Собираем буквы в слова
        x_res = 0
        y_res = 0
        msg = await ctx.channel.send('Прогресс: 0%')
        co = 0
        for el in arg:
            if el == '_':
                x_res = x_res + w_pic
                co = co + 1
            else:
                if el in dic.keys():
                    li2 = dic.get(el)
                    w_cells = int(
                        li2[0])  # Ширина буквы в количестве "пикселей"
                    h_cells = int(
                        li2[1])  # Высота буквы в количестве "пикселей"
                    w_letter = w_pic * w_cells  # Ширина буквы в пикселях
                    h_letter = h_pic * h_cells  # Высота буквы в пикселях
                    letter = Image.new(
                        'RGBA', (w_letter, h_letter),
                        (0, 0, 0, 0))  # Создаем пустое изображение буквы
                    x = 0
                    y = 0
                    n = 2

                    while n < w_cells * h_cells + 2:
                        if int(li2[n]) == 1:
                            letter.paste(pic, (x, y), pic)
                            x = x + w_pic
                        else:
                            x = x + w_pic
                        if (n - 1) % w_cells == 0:
                            y = y + h_pic
                            x = 0
                        n = n + 1

                    if h_cells < height_cells:
                        razn = height_cells - h_cells
                        y_res = y_res + razn * h_pic
                        result.paste(letter, (x_res, y_res), letter)
                        y_res = y_res - razn * h_pic
                    else:
                        result.paste(letter, (x_res, y_res), letter)
                    x_res = x_res + w_letter + w_pic
                    result.save('result.png')
                    co = co + 1
                    loading = co * 100 / len(arg)
                    await msg.edit(content='Прогресс: ' + str(loading) + '%')

                else:
                    await ctx.channel.send('Недопустимый символ!')
                    break
        else:
            await ctx.channel.send(file=discord.File('result.png')
                                   )  # Вывод результата