logs.py 7.7 KB

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