async def user_presence_update(self, client, user, old): Task(self.old_events['user_presence_update'](client, user, old), KOKORO) if self.channel is None: return result = [f'Presence update on user: {user:f} {user.id}'] try: statuses = old['statuses'] except KeyError: pass else: for key in ('desktop', 'mobile', 'web'): result.append( f'{key} status: {statuses.get(key, Status.offline)} -> {user.statuses.get(key, Status.offline)}' ) try: status = old['status'] except KeyError: pass else: result.append(f'status changed: {status} -> {user.status}') try: activities = old['activities'] except KeyError: pass else: added, updated, removed = activities if (added is not None): for activity in added: result.append('Added activity:') result.extend(pretty_print(activity)) if (updated is not None): for activity_change in updated: result.append('Activity updated:') activity = activity_change.activity for key, value in activity_change.old_attributes.items(): result.append( f'- {key} : {value} -> {getattr(activity, key)}') if (removed is not None): for activity in removed: result.append('Removed activity:') result.extend(pretty_print(activity)) pages = [Embed(description=chunk) for chunk in cchunkify(result)] await Pagination(client, self.channel, pages, timeout=120.)
async def embed_update(self, client, message, flag): Task(self.old_events['embed_update'](client, message, flag), KOKORO) if self.channel is None: return result = [f'Message {message.id} got embed update:'] channel = message.channel result.append(f'At channel : {channel:d} {channel.id}') guild = channel.guild if guild is not None: result.append(f'At guild : {guild.name} {guild.id}') if flag == 3: result.append('Less embeds than before???') else: if flag == 1: result.append('Only sizes were update.') elif flag == 2: result.append('Links! Links everywhere...') embeds = message.embeds if embeds is None: result.append('This should not happen, there are no embeds...') else: if flag == 1: for index, embed in enumerate(embeds, 1): if flag == 1: collected = [] image = embed.image if image is not None: collected.append( ('image.height', image.height)) collected.append(('image.width', image.width)) thumbnail = embed.thumbnail if thumbnail is not None: collected.append( ('thumbnail.height', thumbnail.height)) collected.append( ('thumbnail.width', thumbnail.width)) video = embed.video if video is not None: collected.append( ('video.height', video.height)) collected.append(('video.width', video.width)) if collected: result.append( f'Sizes got update at embed {index}:') for name, value in collected: result.append(f'- {name} : {value}') elif flag == 2: for index, embed in enumerate(embeds, 1): if embed.type in EXTRA_EMBED_TYPES: result.append( f'New embed appeared at index {index}:') result.extend(pretty_print(embed)) text = cchunkify(result) pages = [Embed(description=chunk) for chunk in text] await Pagination(client, self.channel, pages, timeout=120.)
async def invite_delete(self,client,invite): Task(self.old_events['invite_delete'](client, invite), KOKORO) if self.channel is None: return text = pretty_print(invite) text.insert(0, f'Invite deleted:') pages = [Embed(description=chunk) for chunk in cchunkify(text)] await Pagination(client, self.channel, pages,120.)
async def message_delete(self,client, message): Task(self.old_events['message_delete'](client, message), KOKORO) if self.channel is None: return text = pretty_print(message) text.insert(0, f'Message {message.id} got deleted') pages = [Embed(description=chunk) for chunk in cchunkify(text)] await Pagination(client, self.channel, pages,120.)
async def role_create(self,client,role): Task(self.old_events['role_create'](client,role,), KOKORO) if self.channel is None: return result=pretty_print(role) result.insert(0, f'A role got created at {role.guild.name} {role.guild.id}') pages=[Embed(description=chunk) for chunk in cchunkify(result)] await Pagination(client, self.channel, pages,120.)
async def guild_create(self,client, guild): Task(self.old_events['guild_create'](client, guild,), KOKORO) if self.channel is None: return result = pretty_print(guild) result.insert(0, f'Guild created: {guild.id}') pages = [Embed(description=chunk) for chunk in cchunkify(result)] await Pagination(client, self.channel, pages,120.)
async def emoji_delete(self,client, emoji, guild): Task(self.old_events['emoji_delete'](client, emoji, guild), KOKORO) if self.channel is None: return result=pretty_print(emoji) result.insert(0, f'Emoji deleted: {emoji.name} {emoji.id} at guild {guild!r}') pages=[Embed(description=chunk) for chunk in cchunkify(result)] await Pagination(client, self.channel, pages,120.)
async def channel_create(self,client,channel): Task(self.old_events['channel_create'](client,channel), KOKORO) if self.channel is None: return result=pretty_print(channel) result.insert(0, f'A channel was created: {channel.name} {channel.id}\nchannel type: {channel.__class__.__name__} ({channel.type})') pages=[Embed(description=chunk) for chunk in cchunkify(result)] await Pagination(client, self.channel, pages,120.)
async def integration_edit(self, client, guild, integration): Task(self.old_events['integration_edit'](client, guild, integration), KOKORO) if self.channel is None: return text = pretty_print(integration) text.insert(0, f'integration_edit at {guild.name} ({guild.id}):') pages = [Embed(description=chunk) for chunk in cchunkify(text)] await Pagination(client, self.channel, pages, 120.)
async def user_voice_leave(self, client, voice_state): Task(self.old_events['user_voice_leave'](client, voice_state), KOKORO) if self.channel is None: return result = [] result.append('User voice leave') result.extend(pretty_print(voice_state)) pages = [Embed(description=chunk) for chunk in cchunkify(result)] await Pagination(client, self.channel, pages, 120.)
async def guild_delete(self,client, guild, profile): Task(self.old_events['guild_delete'](client, guild, profile), KOKORO) if self.channel is None: return result=pretty_print(guild) result.insert(0, f'Guild deleted {guild.id}') result.insert(1, f'I had {len(profile.roles)} roles there') result.insert(2, 'At least i did not boost' if (profile.boosts_since is None) else 'Rip by boost ahhhh...') pages=[Embed(description=chunk) for chunk in cchunkify(result)] await Pagination(client, self.channel, pages,120.)
async def reaction_delete_emoji(self,client, message, emoji, users): Task(self.old_events['reaction_delete_emoji'](client, message, emoji, users), KOKORO) if self.channel is None: return if users is None: text = [] else: text = pretty_print(users) text.insert(0, f'{emoji:e} were removed from message {message.id}:') pages = [Embed(description=chunk) for chunk in cchunkify(text)] await Pagination(client, self.channel, pages,120.)
async def reaction_clear(self,client, message, old): Task(self.old_events['reaction_clear'](client, message, old), KOKORO) if self.channel is None: return if old is None: text = [] else: text = pretty_print(old) text.insert(0, f'Reactions got cleared from message {message.id}:') pages = [Embed(description=chunk) for chunk in cchunkify(text)] await Pagination(client, self.channel, pages,120.)
async def message_edit(self,client, message, old): Task(self.old_events['message_edit'](client, message, old), KOKORO) if self.channel is None: return result=[f'Message {message.id} was edited'] channel=message.channel result.append(f'At channel : {channel:d} {channel.id}') guild=channel.guild if guild is not None: result.append(f'At guild : {guild.name} {guild.id}') if old is None: result.append('The message is uncached, cannot provide changes!') content = message.content content_ln = len(content) result.append(f'content: (len={content_ln})') if content_ln > 500: content = content[:500].replace('`', '\\`') result.append(f'--------------------\n{content}\n... +{content_ln-500} more\n--------------------') else: content=content.replace('`', '\\`') result.append(f'--------------------\n{content}\n--------------------') else: for key, value in old.items(): if key in ('pinned', 'activity_party_id', 'everyone_mention'): result.append(f'{key} changed: {value!r} -> {getattr(message, key)!r}') continue if key in ('edited',): if value is None: result.append(f'{key} changed: None -> {getattr(message, key):%Y.%m.%d-%H:%M:%S}') else: result.append(f'{key} changed: {value:%Y.%m.%d-%H:%M:%S} -> {getattr(message, key):%Y.%m.%d-%H:%M:%S}') continue if key in ('application', 'activity', 'attachments', 'embeds'): result.append(f'{key} changed:') if value is None: result.append('From None') else: result.extend(pretty_print(value)) value = getattr(message, key) if value is None: result.append('To None') else: result.extend(pretty_print(value)) continue if key in ('content',): result.append(f'{key} changed from:') content=value break_ = False while True: content_ln = len(content) result.append(f'{key}: (len={content_ln})') if content_ln > 500: content = content[:500].replace('`', '\\`') result.append(f'--------------------\n{content}\n... +{content_ln-500} more\n--------------------') else: content = content.replace('`', '\\`') result.append(f'--------------------\n{content}\n--------------------') if break_: break break_ = True content = getattr(message, key) result.append('To:') continue if key in ('user_mentions', 'role_mentions', 'cross_mentions'): removed, added = listdifference(value, getattr(message, key)) if removed: result.append(f'{key} removed : {len(removed)}') for obj in removed: result.append(f'- {obj.name} {obj.id}') if added: result.append(f'{key} added : {len(added)}') for obj in added: result.append(f'- {obj.name} {obj.id}') continue if key in ('flags',): old = list(value) old.sort() value = getattr(message, key) new = list(value) new.sort() removed, added = listdifference(old,new) if removed: result.append(f'{key} removed : {len(removed)}') for name in removed: result.append(f'- {name}') if added: result.append(f'{key} added : {len(added)}') for name in added: result.append(f'- {name}') continue text = cchunkify(result) pages = [Embed(description=chunk) for chunk in text] await Pagination(client, self.channel, pages,120.)