Guest User

botDC.py

a guest
Jan 20th, 2025
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 19.47 KB | None | 0 0
  1. from datetime import datetime, timedelta
  2. import os
  3. from typing import Optional
  4.  
  5. import discord
  6. from discord.ext import commands
  7. from dctoken import token
  8.  
  9. ##################################################################################################################
  10.  
  11. # Bot-Setup
  12. intents: discord.Intents = discord.Intents.all()
  13. intents.message_content = True
  14. intents.messages = True
  15. bot: commands.Bot = commands.Bot(command_prefix='!', intents=intents)
  16.  
  17. ##################################################################################################################
  18.  
  19. def info(message: str) -> None:
  20.     print(f'\033[90m{datetime.now().strftime("%Y-%m-%d %H:%M:%S")} \033[94mINFO     \033[35mBOT \033[0m{message}')
  21.  
  22. def warn(message: str) -> None:
  23.     print(f'\033[90m{datetime.now().strftime("%Y-%m-%d %H:%M:%S")} \033[94mWARNING  \033[35mBOT \033[0m{message}')
  24.  
  25. def error(message: str) -> None:
  26.     print(f'\033[90m{datetime.now().strftime("%Y-%m-%d %H:%M:%S")} \033[94mERROR    \033[35mBOT \033[0m{message}')
  27.  
  28. def critical(message: str) -> None:
  29.     print(f'\033[90m{datetime.now().strftime("%Y-%m-%d %H:%M:%S")} \033[94mCRITICAL \033[35mBOT \033[0m{message}')
  30.  
  31. ##################################################################################################################
  32.  
  33. @bot.event
  34. async def on_ready() -> None:
  35.     await bot.tree.sync()
  36.     info(f'Bot {bot.user} has connected to Discord and is live!')
  37.    
  38.    
  39. @bot.event
  40. async def on_exit() -> None:
  41.     info(f"Bot is shutting down!")
  42.  
  43. @bot.event
  44. async def on_reaction_add(reaction: discord.Reaction, user: discord.Member) -> None:
  45.     if reaction.emoji == '🗑️' and user != bot.user:
  46.         await reaction.message.delete()
  47.         info(f"Message {reaction.message.content} ({reaction.message.id}) was deleted by @{user}.")
  48.  
  49. ##################################################################################################################
  50.  
  51. @bot.tree.command(name='delete_messages', description='Deletes the last selected amount of messages')
  52. async def delete_messages(interaction: discord.Interaction, amount: Optional[int]) -> None:
  53.     if not interaction.user.guild_permissions.manage_messages:  # type: ignore
  54.         embed = discord.Embed(title="Error", description="You do not have permission to delete messages.", color=0xff0000)
  55.         await interaction.response.send_message(embed=embed)
  56.         info(f"User @{interaction.user} tried to delete messages without permission.")
  57.         return
  58.  
  59.     if amount == 'all':
  60.         amount = None  # type: ignore
  61.     else:
  62.         try:
  63.             amount = int(amount) + 1 #type: ignore
  64.             if amount <= 0:
  65.                 raise ValueError
  66.         except ValueError:
  67.             embed = discord.Embed(title="Error", description="The number of messages to be deleted must be greater than 0!", color=0xff0000)
  68.             await interaction.response.send_message(embed=embed)
  69.             info(f"User @{interaction.user} tried to delete an invalid amount of messages.")
  70.             return
  71.        
  72.     try:
  73.         amount = int(amount) #type: ignore
  74.     except:
  75.         pass
  76.    
  77.     if isinstance(interaction.channel, discord.TextChannel) and isinstance(amount, int):
  78.         deleted = await interaction.channel.purge(limit=amount)
  79.     else:
  80.         embed = discord.Embed(title="Error", description="This command can only be used in a text channel.", color=0xff0000)
  81.         await interaction.response.send_message(embed=embed)
  82.         info(f"User @{interaction.user} tried to delete messages in a non-text channel.")
  83.         return
  84.    
  85.     embed = discord.Embed(title="Message Deletion", description=f"{len(deleted)-1} messages have been deleted.", color=0x00ff00)
  86.     await interaction.response.send_message(embed=embed, delete_after=5)  # Send confirmation
  87.     info(f"User @{interaction.user} deleted {len(deleted)-1} messages in #{interaction.channel}.")
  88.  
  89.  
  90. @bot.tree.command(name='dm_reminder', description='Send\'s a Reminder to a Person via DM')
  91. async def dm_reminder(interaction: discord.Interaction, target: discord.Member | discord.Role, timer: int, *, message: str) -> None:
  92.     """
  93.    Sends a reminder to a user or a role.
  94.    If the time is 0, the reminder is sent immediately.
  95.  
  96.    ---
  97.    target: discord.Member -> The target to be reminded.
  98.    timer: int -> Time in minutes until the message is sent.
  99.    message: str -> The message that will appear in the reminder.
  100.    """
  101.     reminder_title: str = "<:reminder_1:1330501855503061042><:reminder_2:1330501857457606757><:reminder_3:1330501859827257406><:reminder_4:1330501861731602562><:reminder_5:1330501863958777997><:reminder_6:1330501865753804873>"
  102.    
  103.     required_roles = ['Supporter', 'Moderator', 'Admin']
  104.     user_roles = [role.name for role in interaction.user.roles] #type: ignore
  105.     if any(role in required_roles for role in user_roles) or interaction.user.guild_permissions.administrator: #type: ignore
  106.         pass
  107.     else:
  108.         embed = discord.Embed(title="Error", description="You do not have permission to create a reminder.", color=0xff0000)
  109.         await interaction.response.send_message(embed=embed)
  110.         info(f"User @{interaction.user} tried to create a reminder without permission.")
  111.         return
  112.    
  113.     # Nachricht löschen, die den Reminder erstellt
  114.     await interaction.message.delete() #type: ignore
  115.     info(f"User @{interaction.user} created a reminder with message: '{message}' for {target.name} in {timer} minutes.")
  116.  
  117.     # Sofortige Erinnerung bei Zeit = 0
  118.     if timer == 0:
  119.         embed_reminder = discord.Embed(
  120.             title=reminder_title,
  121.             description=f"{message.replace('\\n', '\n')}\n\n{target.mention}",
  122.             color=discord.Color.blue(),
  123.             timestamp=datetime.now()
  124.         )
  125.         embed_reminder.set_footer(text=f"Gesendet von {interaction.user.display_name}", icon_url=interaction.user.avatar.url) #type: ignore
  126.         if isinstance(target, discord.Member):
  127.             try:
  128.                 await target.send(embed=embed_reminder)
  129.             except discord.Forbidden:
  130.                 warn(f"Could not send DM to @{target.name}. Their DMs might be closed.")
  131.         else:
  132.             for member in target.members:
  133.                 try:
  134.                     await member.send(embed=embed_reminder)
  135.                 except discord.Forbidden:
  136.                     warn(f"Could not send DM to @{member.name}. Their DMs might be closed.")
  137.         info(f"Instant reminder sent to {target.name} with message: '{message}'.")
  138.         return
  139.  
  140.     # Zeit validieren
  141.     if timer < 0:
  142.         await interaction.response.send_message("Die Zeit muss 0 oder größer sein!")
  143.         warn(f"User @{interaction.user} tried to set a reminder with invalid time: {timer}.")
  144.         return
  145.  
  146.     # Aktuelle Zeit und geplante Zeit berechnen
  147.     remind_time = datetime.now() + timedelta(minutes=timer)
  148.  
  149.     # Bestätigung senden
  150.     embed_confirm = discord.Embed(
  151.         title="đź”” Reminder gesetzt!",
  152.         description=f"Ich werde {target.mention} erinnern.",
  153.         color=discord.Color.green(),
  154.         timestamp=datetime.now()
  155.     )
  156.     embed_confirm.add_field(name="Nachricht", value=message, inline=False)
  157.     embed_confirm.add_field(name="Erinnerung um", value=remind_time.strftime("%Y-%m-%d %H:%M:%S"), inline=True)
  158.     embed_confirm.set_footer(text=f"Gesetzt von {interaction.user.display_name}", icon_url=interaction.user.avatar.url) #type: ignore
  159.     await interaction.response.send_message(embed=embed_confirm, delete_after=10)
  160.    
  161.     # Warten fĂĽr die angegebene Zeit
  162.     await discord.utils.sleep_until(remind_time)
  163.    
  164.     # Reminder senden
  165.     embed_reminder = discord.Embed(
  166.         title=reminder_title,
  167.         description=f"{message.replace('\\n', '\n')}\n\n{target.mention}",
  168.         color=discord.Color.blue(),
  169.         timestamp=datetime.now()
  170.     )
  171.     embed_reminder.set_footer(text=f"Gesendet von {interaction.user.display_name}", icon_url=interaction.user.avatar.url) #type: ignore
  172.     if isinstance(target, discord.Member):
  173.         try:
  174.             await target.send(embed=embed_reminder)
  175.         except discord.Forbidden:
  176.             warn(f"Could not send DM to @{target.name}. Their DMs might be closed.")
  177.     else:
  178.         for member in target.members:
  179.             try:
  180.                 await member.send(embed=embed_reminder)
  181.             except discord.Forbidden:
  182.                 warn(f"Could not send DM to @{member.name}. Their DMs might be closed.")
  183.     info(f"Reminder sent to {target.name} with message: '{message}' after waiting for {timer} minutes.")
  184.    
  185. @bot.tree.command(name='updateping', description='Toggles @update-ping role')
  186. async def updateping(interaction: discord.Interaction) -> None:
  187.     # Get the update-ping role
  188.     update_ping_role: Optional[discord.Role] = discord.utils.get(interaction.guild.roles, name="update-ping") #type: ignore
  189.  
  190.     # Check if the user has the update-ping role
  191.     if update_ping_role in interaction.user.roles: #type: ignore
  192.         # If the user has the role, remove it
  193.         await interaction.user.remove_roles(update_ping_role) #type: ignore
  194.         embed = discord.Embed(title="Role Update", description="Update-Ping role removed.", color=0x00ff00)
  195.         await interaction.response.send_message(embed=embed)
  196.         info(f"Update-Ping role removed from @{interaction.user}.")
  197.     else:
  198.         # If the user doesn't have the role, add it
  199.         await interaction.user.add_roles(update_ping_role) #type: ignore
  200.         embed = discord.Embed(title="Role Update", description="Update-Ping role added.", color=0x00ff00)
  201.         await interaction.response.send_message(embed=embed)
  202.         info(f"Update-Ping role added to @{interaction.user}.")
  203.  
  204. @bot.tree.command()
  205. async def reminder(interaction: discord.Interaction, role: discord.Role, timer: int, *, message: str) -> None:
  206.     """
  207.    Sendet einen Reminder mit einer Rolle und einer Nachricht.
  208.    Wenn die Zeit 0 ist, wird die Rolle sofort erinnert.
  209.  
  210.    ---
  211.    role: discord.Role -> Die Rolle, die gepingt werden soll.
  212.    timer: int -> Zeit in Minuten, bis die Nachricht gesendet wird.
  213.    message: str -> Die Nachricht, die im Reminder erscheinen soll.
  214.    """
  215.     reminder_title: str = "<:reminder_1:1330501855503061042><:reminder_2:1330501857457606757><:reminder_3:1330501859827257406><:reminder_4:1330501861731602562><:reminder_5:1330501863958777997><:reminder_6:1330501865753804873>"
  216.    
  217.     required_roles = ['Supporter', 'Moderator', 'Admin']
  218.     user_roles = [role.name for role in interaction.user.roles] #type: ignore
  219.     if any(role in required_roles for role in user_roles) or interaction.user.guild_permissions.administrator: #type: ignore
  220.         pass
  221.     else:
  222.         embed = discord.Embed(title="Error", description="You do not have permission to create a reminder.", color=0xff0000)
  223.         await interaction.response.send_message(embed=embed)
  224.         info(f"User @{interaction.user} tried to create a reminder without permission.")
  225.         return
  226.    
  227.     # Nachricht löschen, die den Reminder erstellt
  228.     await interaction.message.delete() #type: ignore
  229.     info(f"User @{interaction.user} created a reminder with message: '{message}' for role: @{role.name} in {timer} minutes.")
  230.  
  231.     # Sofortige Erinnerung bei Zeit = 0
  232.     if timer == 0:
  233.         embed_reminder = discord.Embed(
  234.             title=reminder_title,
  235.             description=f"{message.replace('\\n', '\n')}\n\n{role.mention}",
  236.             color=discord.Color.blue(),
  237.             timestamp=datetime.now()
  238.         )
  239.         embed_reminder.set_footer(text=f"Gesendet von {interaction.user.display_name}", icon_url=interaction.user.avatar.url) #type: ignore
  240.         await interaction.response.send_message(embed=embed_reminder)
  241.         info(f"Instant reminder sent to @{role.name} with message: '{message}'.")
  242.         return
  243.  
  244.     # Zeit validieren
  245.     if timer < 0:
  246.         await interaction.response.send_message("Die Zeit muss 0 oder größer sein!")
  247.         warn(f"User @{interaction.user} tried to set a reminder with invalid time: {timer}.")
  248.         return
  249.  
  250.     # Aktuelle Zeit und geplante Zeit berechnen
  251.     remind_time = datetime.now() + timedelta(minutes=timer)
  252.  
  253.     # Bestätigung senden
  254.     embed_confirm = discord.Embed(
  255.         title="đź”” Reminder gesetzt!",
  256.         description=f"Ich werde {role.mention} erinnern.",
  257.         color=discord.Color.green(),
  258.         timestamp=datetime.now()
  259.     )
  260.     embed_confirm.add_field(name="Nachricht", value=message, inline=False)
  261.     embed_confirm.add_field(name="Erinnerung um", value=remind_time.strftime("%Y-%m-%d %H:%M:%S"), inline=True)
  262.     embed_confirm.set_footer(text=f"Gesetzt von {interaction.user.display_name}", icon_url=interaction.user.avatar.url) #type: ignore
  263.     await interaction.response.send_message(embed=embed_confirm, delete_after=10)
  264.    
  265.     # Warten fĂĽr die angegebene Zeit
  266.     await discord.utils.sleep_until(remind_time)
  267.    
  268.     # Reminder senden
  269.     embed_reminder = discord.Embed(
  270.         title=reminder_title,
  271.         description=f"{message.replace('\\n', '\n')}\n\n{role.mention}",
  272.         color=discord.Color.blue(),
  273.         timestamp=datetime.now()
  274.     )
  275.     embed_reminder.set_footer(text=f"Gesendet von {interaction.user.display_name}", icon_url=interaction.user.avatar.url) #type: ignore
  276.     await interaction.response.send_message(embed=embed_reminder)
  277.     info(f"Reminder sent to @{role.name} with message: '{message}' after waiting for {timer} minutes.")
  278.  
  279. @bot.tree.command(name='install', description='Toggle\'s @install role')
  280. async def install(interaction: discord.Interaction) -> None:
  281.     # Get the 'Install Needed' role
  282.     install_needed_role: Optional[discord.Role] = discord.utils.get(interaction.guild.roles, name="Install Needed") #type: ignore
  283.  
  284.     # Check if the user has the 'Install Needed' role
  285.     if install_needed_role in interaction.user.roles: #type: ignore
  286.         # If the user has the role, remove it
  287.         await interaction.user.remove_roles(install_needed_role) #type: ignore
  288.         embed = discord.Embed(title="Role Update", description="'Install Needed' role removed.", color=0x00ff00)
  289.         await interaction.response.send_message(embed=embed)
  290.         info(f"Install Needed role removed from @{interaction.user}.")
  291.     else:
  292.         # If the user doesn't have the role, add it
  293.         await interaction.user.add_roles(install_needed_role) #type: ignore
  294.         embed = discord.Embed(title="Role Update", description="'Install Needed' role added.", color=0x00ff00)
  295.         await interaction.response.send_message(embed=embed)
  296.         info(f"Install Needed role added to @{interaction.user}.")
  297.        
  298. @bot.tree.command(name='dm_spam', description='Spams a User\'s Dm with a Message in the selected amount')
  299. async def dm_spam(interaction: discord.Interaction, user: discord.Member, amount: int, message: str) -> None:
  300.     await interaction.message.delete() #type: ignore
  301.     if user == bot.user:
  302.         return
  303.    
  304.     # Check if the user has the 'Reminder' role
  305.     admin_role = discord.utils.get(interaction.guild.roles, name="Admin") #type: ignore
  306.     moderator_role = discord.utils.get(interaction.guild.roles, name="Moderator") #type: ignore
  307.     supporter_role = discord.utils.get(interaction.guild.roles, name="Supporter") #type: ignore
  308.     premium_role = discord.utils.get(interaction.guild.roles, name="Premium") #type: ignore
  309.    
  310.     if admin_role not in interaction.user.roles and moderator_role not in interaction.user.roles and supporter_role not in interaction.user.roles and premium_role not in interaction.user.roles: #type: ignore
  311.         return
  312.    
  313.     for i in range(0, amount):
  314.         try:
  315.             await user.send(content=' '.join(msg for msg in message))
  316.             info(f"DM sent to @{user.name} (Attempt {i+1}/{amount}).")
  317.         except discord.Forbidden:
  318.             warn(f"Could not send DM to @{user.name}. Their DMs might be closed.")  
  319.  
  320. @bot.tree.command(name="dm_warn", description="Warn a user and send them a detailed embed message.")
  321. async def dm_warn(interaction: discord.Interaction, member: discord.Member, reason: str):
  322.     """
  323.    Warn a user and send a detailed embed message to them.
  324.  
  325.    ---
  326.    arg:
  327.    member: discord.Member - The user to warn.
  328.    reason: str - The reason for the warning.
  329.    """
  330.     # Check if the command user has the necessary permissions
  331.     if not interaction.user.guild_permissions.manage_messages: #type: ignore
  332.         await interaction.response.send_message(
  333.             embed=discord.Embed(
  334.                 title="Permission Denied",
  335.                 description="You do not have permission to use this command!",
  336.                 color=discord.Color.red()
  337.             ),
  338.             ephemeral=True
  339.         )
  340.         return
  341.  
  342.     # Simulate the Dyno warning command
  343.     try:
  344.         # Send the warning in the current channel
  345.         warn_message = f"/warn {member.mention} {reason}"
  346.         await interaction.channel.send(embed=discord.Embed( #type: ignore
  347.             title="Warning Issued",
  348.             description=f"{warn_message}",
  349.             color=discord.Color.orange()
  350.         ))
  351.  
  352.         # Create and send an embed message to the warned user
  353.         dm_embed = discord.Embed(
  354.             title="You Have Been Warned",
  355.             description=(
  356.                 f"Hello {member.mention},\n\n"
  357.                 f"You have been warned in **{interaction.guild.name}** for the following reason:\n" #type: ignore
  358.                 f"**{reason}**\n\n"
  359.                 "Please adhere to the server rules to avoid further consequences.\n"
  360.                 "If you have any questions, contact the server team."
  361.             ),
  362.             color=discord.Color.orange()
  363.         )
  364.  
  365.         try:
  366.             await member.send(embed=dm_embed)
  367.             confirmation_embed = discord.Embed(
  368.                 title="User Warned Successfully",
  369.                 description=f"{member.mention} has been warned and informed via DM.",
  370.                 color=discord.Color.green()
  371.             )
  372.         except discord.Forbidden:
  373.             confirmation_embed = discord.Embed(
  374.                 title="User Warned",
  375.                 description=f"{member.mention} has been warned, but the DM could not be delivered.",
  376.                 color=discord.Color.yellow()
  377.             )
  378.  
  379.         # Send confirmation in the channel
  380.         await interaction.response.send_message(embed=confirmation_embed)
  381.  
  382.     except Exception as e:
  383.         error_embed = discord.Embed(
  384.             title="Error",
  385.             description=f"There was a problem executing the command: {e}",
  386.             color=discord.Color.red()
  387.         )
  388.         await interaction.response.send_message(embed=error_embed, ephemeral=True)
  389.  
  390. ##################################################################################################################
  391.  
  392. @bot.tree.command(name='help', description='Show\'s a List of Commands and what they do')
  393. async def list_commands(interaction: discord.Interaction) -> None:
  394.     embed = discord.Embed(title="Help", description="A list of available commands.", color=0x00ff00)
  395.     for command in bot.commands:
  396.         embed.add_field(name=f"/{command.name}", value=command.help, inline=False)
  397.     await interaction.response.send_message(embed=embed)
  398.     info(f"User @{interaction.user} requested the list of commands.")
  399.  
  400. ##################################################################################################################
  401.  
  402. def main() -> None:
  403.     os.system('cls' if os.name == 'nt' else 'clear')
  404.     bot.run(token)
  405.  
  406. if __name__ == '__main__':
  407.     main()
Advertisement
Add Comment
Please, Sign In to add comment