logs.py 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. import discord
  2. from discord.ext import commands
  3. from discord.commands import Option
  4. from discord.commands import slash_command
  5. import configparser
  6. import time
  7. class actionlog(commands.Cog):
  8. def __init__(self, bot: discord.Bot):
  9. self.bot = bot
  10. def _load_config(self):
  11. config = configparser.ConfigParser()
  12. configFilePath = r'config.cfg'
  13. config.read(configFilePath)
  14. return config
  15. #Delted Message Log
  16. @commands.Cog.listener()
  17. async def on_message_delete(self, message: discord.Message):
  18. config = self._load_config()
  19. enable_log = config.getboolean("Logs","enable_action_log")
  20. if not enable_log:
  21. return
  22. log_channel_id = int(config["Logs"]["action_log"])
  23. log_channel = self.bot.get_channel(log_channel_id)
  24. if message.author.bot:
  25. return
  26. else:
  27. embed = discord.Embed(
  28. title="Message Deleted",
  29. description=f"A message by {message.author.mention} was deleted in {message.channel.mention}.",
  30. color=discord.Color.red(),
  31. timestamp=message.created_at
  32. )
  33. embed.add_field(name="Message Content", value=message.content or "No content", inline=False)
  34. embed.set_footer(text=f"User ID: {message.author.id} | Message ID: {message.id}")
  35. await log_channel.send(embed=embed)
  36. #Edited Message Log
  37. @commands.Cog.listener()
  38. async def on_message_edit(self, before, after):
  39. config = self._load_config()
  40. enable_log = config.getboolean("Logs","enable_action_log")
  41. if not enable_log:
  42. return
  43. log_channel_id = int(config["Logs"]["action_log"])
  44. log_channel = self.bot.get_channel(log_channel_id)
  45. if before.author.bot:
  46. return
  47. else:
  48. embed = discord.Embed(
  49. title="Message Edited",
  50. description=f"A message by {before.author.mention} was edited in {before.channel.mention}.",
  51. color=discord.Color.orange(),
  52. timestamp=after.edited_at or discord.utils.utcnow()
  53. )
  54. embed.add_field(name="Before", value=before.content or "No content", inline=False)
  55. embed.add_field(name="After", value=after.content or "No content", inline=False)
  56. embed.set_footer(text=f"User ID: {before.author.id} | Message ID: {before.id}")
  57. await log_channel.send(embed=embed)
  58. #Member Join Log
  59. @commands.Cog.listener()
  60. async def on_member_join(self, member):
  61. config = self._load_config()
  62. enable_log = config.getboolean("Logs","enable_action_log")
  63. if not enable_log:
  64. return
  65. log_channel_id = int(config["Logs"]["action_log"])
  66. log_channel = self.bot.get_channel(log_channel_id)
  67. embed = discord.Embed(
  68. title="Member Joined",
  69. description=f"{member.mention} has joined the server.",
  70. color=discord.Color.green(),
  71. timestamp=discord.utils.utcnow()
  72. )
  73. embed.set_footer(text=f"User ID: {member.id}")
  74. await log_channel.send(embed=embed)
  75. #Member Leave Log
  76. @commands.Cog.listener()
  77. async def on_member_remove(self, member):
  78. config = self._load_config()
  79. enable_log = config.getboolean("Logs","enable_action_log")
  80. if not enable_log:
  81. return
  82. log_channel_id = int(config["Logs"]["action_log"])
  83. log_channel = self.bot.get_channel(log_channel_id)
  84. embed = discord.Embed(
  85. title="Member Left",
  86. description=f"{member.mention} has left the server.",
  87. color=discord.Color.dark_red(),
  88. timestamp=discord.utils.utcnow()
  89. )
  90. embed.set_footer(text=f"User ID: {member.id}")
  91. await log_channel.send(embed=embed)
  92. #Role Update Log
  93. @commands.Cog.listener()
  94. async def on_guild_role_update(self, before, after):
  95. config = self._load_config()
  96. enable_log = config.getboolean("Logs","enable_action_log")
  97. if not enable_log:
  98. return
  99. log_channel_id = int(config["Logs"]["action_log"])
  100. log_channel = self.bot.get_channel(log_channel_id)
  101. embed = discord.Embed(
  102. title="Role Updated",
  103. description=f"The role **{before.name}** has been updated.",
  104. color=discord.Color.blue(),
  105. timestamp=discord.utils.utcnow()
  106. )
  107. embed.add_field(name="Before", value=f"Name: {before.name}\nColor: {before.color}\nPermissions: {before.permissions}", inline=False)
  108. embed.add_field(name="After", value=f"Name: {after.name}\nColor: {after.color}\nPermissions: {after.permissions}", inline=False)
  109. embed.set_footer(text=f"Role ID: {before.id}")
  110. await log_channel.send(embed=embed)
  111. #Role added log
  112. @commands.Cog.listener()
  113. async def on_guild_role_create(self, role):
  114. config = self._load_config()
  115. enable_log = config.getboolean("Logs","enable_action_log")
  116. if not enable_log:
  117. return
  118. log_channel_id = int(config["Logs"]["action_log"])
  119. log_channel = self.bot.get_channel(log_channel_id)
  120. embed = discord.Embed(
  121. title="Role Created",
  122. description=f"The role **{role.name}** has been created.",
  123. color=discord.Color.green(),
  124. timestamp=discord.utils.utcnow()
  125. )
  126. embed.set_footer(text=f"Role ID: {role.id}")
  127. await log_channel.send(embed=embed)
  128. #Role deleted log
  129. @commands.Cog.listener()
  130. async def on_guild_role_delete(self, role):
  131. config = self._load_config()
  132. enable_log = config.getboolean("Logs","enable_action_log")
  133. if not enable_log:
  134. return
  135. log_channel_id = int(config["Logs"]["action_log"])
  136. log_channel = self.bot.get_channel(log_channel_id)
  137. embed = discord.Embed(
  138. title="Role Deleted",
  139. description=f"The role **{role.name}** has been deleted.",
  140. color=discord.Color.red(),
  141. timestamp=discord.utils.utcnow()
  142. )
  143. embed.set_footer(text=f"Role ID: {role.id}")
  144. await log_channel.send(embed=embed)
  145. #User Role update log
  146. @commands.Cog.listener()
  147. async def on_member_update(self, before, after):
  148. config = self._load_config()
  149. enable_log = config.getboolean("Logs","enable_action_log")
  150. if not enable_log:
  151. return
  152. log_channel_id = int(config["Logs"]["action_log"])
  153. log_channel = self.bot.get_channel(log_channel_id)
  154. before_roles = set(before.roles)
  155. after_roles = set(after.roles)
  156. added_roles = after_roles - before_roles
  157. removed_roles = before_roles - after_roles
  158. for role in added_roles:
  159. embed = discord.Embed(
  160. title="Role Added",
  161. description=f"The role **{role.name}** has been added to {after.mention}.",
  162. color=discord.Color.green(),
  163. timestamp=discord.utils.utcnow()
  164. )
  165. embed.set_footer(text=f"User ID: {after.id} | Role ID: {role.id}")
  166. await log_channel.send(embed=embed)
  167. for role in removed_roles:
  168. embed = discord.Embed(
  169. title="Role Removed",
  170. description=f"The role **{role.name}** has been removed from {after.mention}.",
  171. color=discord.Color.red(),
  172. timestamp=discord.utils.utcnow()
  173. )
  174. embed.set_footer(text=f"User ID: {after.id} | Role ID: {role.id}")
  175. await log_channel.send(embed=embed)
  176. def setup(bot: discord.Bot):
  177. bot.add_cog(actionlog(bot))