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")
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))
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)
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)
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)
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)
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), )
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)
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') ) # Вывод результата