2025-09-14 18:54:56 -04:00
import platform
import discord
2025-10-09 00:24:43 -04:00
from discord import app_commands
2025-09-14 18:54:56 -04:00
from discord . ext import commands
2025-10-09 00:24:43 -04:00
from discord . ext . commands import Context
2025-10-09 01:00:00 -04:00
from datetime import datetime
2025-10-16 17:52:05 -04:00
import time
import pytz
2025-10-17 01:44:26 -04:00
from utils . contributors import generate_contributors_image
2025-10-09 01:00:00 -04:00
class FeedbackForm ( discord . ui . Modal , title = " Feedback " ) :
feedback = discord . ui . TextInput (
label = " What do you think about this bot? " ,
style = discord . TextStyle . long ,
placeholder = " Type your answer here... " ,
required = True ,
max_length = 256 ,
)
def __init__ ( self , bot ) :
super ( ) . __init__ ( )
self . bot = bot
async def on_submit ( self , interaction : discord . Interaction ) :
await interaction . response . send_message (
embed = discord . Embed (
title = " Thank You! " ,
description = " Your feedback has been submitted, the owners have been notified about it. " ,
color = 0x7289DA ,
) . set_author ( name = " Feedback System " , icon_url = " https://yes.nighty.works/raw/gSxqzV.png " ) ,
ephemeral = True ,
)
app_owner = ( await self . bot . application_info ( ) ) . owner
await app_owner . send (
embed = discord . Embed (
title = " New Feedback " ,
description = f " { interaction . user } (<@ { interaction . user . id } >) has submitted a new feedback: \n ``` \n { self . feedback . value } \n ``` " ,
color = 0x7289DA ,
) . set_author ( name = " Feedback System " , icon_url = " https://yes.nighty.works/raw/gSxqzV.png " )
)
class BotInfoView ( discord . ui . View ) :
def __init__ ( self , bot ) :
super ( ) . __init__ ( timeout = None )
self . bot = bot
github_emoji = discord . PartialEmoji ( name = " githubicon " , id = 1417717356846776340 )
github_button = discord . ui . Button (
label = " GitHub " ,
emoji = github_emoji ,
url = " https://github.com/neoarz/syntrel " ,
style = discord . ButtonStyle . link
)
self . add_item ( github_button )
2025-10-10 00:40:50 -04:00
feedback_emoji = discord . PartialEmoji ( name = " ThumbsUpBlueEmoji " , id = 1426066711500554302 )
2025-10-09 01:00:00 -04:00
feedback_button = discord . ui . Button (
label = " Feedback " ,
emoji = feedback_emoji ,
style = discord . ButtonStyle . secondary ,
custom_id = " feedback_button "
)
feedback_button . callback = self . feedback_callback
self . add_item ( feedback_button )
bug_emoji = discord . PartialEmoji ( name = " BugHunterBadge " , id = 1425703361625460856 )
bug_button = discord . ui . Button (
label = " Bug Report " ,
emoji = bug_emoji ,
url = " https://github.com/neoarz/Syntrel/issues " ,
style = discord . ButtonStyle . link
)
self . add_item ( bug_button )
async def feedback_callback ( self , interaction : discord . Interaction ) :
feedback_form = FeedbackForm ( self . bot )
await interaction . response . send_modal ( feedback_form )
2025-10-09 00:24:43 -04:00
class BotInfo ( commands . Cog , name = " botinfo " ) :
def __init__ ( self , bot ) - > None :
self . bot = bot
2025-09-14 18:54:56 -04:00
2025-10-09 08:02:52 -04:00
@commands.Cog.listener ( )
async def on_guild_join ( self , guild ) :
channel = guild . system_channel or next (
( c for c in guild . text_channels if c . permissions_for ( guild . me ) . send_messages ) ,
None
)
if channel :
2025-10-16 17:52:05 -04:00
ny_tz = pytz . timezone ( ' America/New_York ' )
current_time = datetime . now ( ny_tz ) . strftime ( " % m/ %d / % y, % I: % M % p " )
2025-10-09 08:02:52 -04:00
description_text = (
2025-10-18 17:00:34 +03:00
" Heyooo! I ' m Syntrel, a bot made to help with [SideStore](https://discord.gg/3DwCwpBHfv), [MeloNX](https://discord.gg/Q4VkbkYfmk), and [idevice](https://discord.gg/ZnNcrRT3M8). I even have some cool extras! If you encounter any issues, please file a bug report. If you have any feedback or suggestions, simply select \" Feedback \" ! <:HeardPanda:1417619745896660992> \n \n "
2025-10-16 17:52:05 -04:00
" **New to Syntrel?** Run `/help` to get started and explore all available commands! \n \n "
2025-10-09 08:02:52 -04:00
f " **Owner:** [neoarz](https://discordapp.com/users/1015372540937502851) \n "
f " **Python Version:** { platform . python_version ( ) } \n "
2025-10-17 00:15:06 -04:00
f " **Discord.py Version:** { discord . __version__ } \n "
2025-10-09 08:02:52 -04:00
f " **Prefix:** / (Slash Commands) or { self . bot . bot_prefix } for normal commands "
)
embed = discord . Embed (
title = " Syntrel Discord Bot " ,
description = description_text ,
color = 0x7289DA ,
)
embed . set_author ( name = " Syntrel " , icon_url = " https://github.com/neoarz/Syntrel/blob/main/assets/icon.png?raw=true " )
embed . set_image ( url = " https://github.com/neoarz/Syntrel/raw/main/assets/bannerdark.png " )
embed . set_footer ( text = f " neoarz • { current_time } " , icon_url = " https://yes.nighty.works/raw/P1Us35.webp " )
view = BotInfoView ( self . bot )
await channel . send ( embed = embed , view = view )
else :
self . bot . logger . warning ( f " Couldn ' t find a suitable channel in { guild . name } " )
2025-09-14 18:54:56 -04:00
@commands.hybrid_command (
name = " botinfo " ,
description = " Get some useful (or not) information about the bot. " ,
)
2025-10-09 00:24:43 -04:00
@app_commands.allowed_contexts ( guilds = True , dms = True , private_channels = True )
@app_commands.allowed_installs ( guilds = True , users = True )
async def botinfo ( self , context : Context ) - > None :
2025-10-17 01:44:26 -04:00
if context . interaction :
await context . interaction . response . defer ( ephemeral = False )
2025-10-16 17:52:05 -04:00
ny_tz = pytz . timezone ( ' America/New_York ' )
current_time = datetime . now ( ny_tz ) . strftime ( " % m/ %d / % y, % I: % M % p " )
2025-10-09 01:00:00 -04:00
description_text = (
2025-10-09 22:56:43 -04:00
" Heyooo! Im Syntrel, a bot made to help with [SideStore](https://discord.gg/3DwCwpBHfv), [MeloNX](https://discord.gg/Q4VkbkYfmk), and [idevice](https://discord.gg/ZnNcrRT3M8). I even have some cool extras! If you encounter any issues, please file a bug report. If you have any feedback or suggestions, simply select \" Feedback \" ! <:HeardPanda:1417619745896660992> \n \n "
2025-10-16 17:52:05 -04:00
" **New to Syntrel?** Run `/help` to get started and explore all available commands! \n \n "
2025-10-09 01:00:00 -04:00
f " **Owner:** [neoarz](https://discordapp.com/users/1015372540937502851) \n "
f " **Python Version:** { platform . python_version ( ) } \n "
2025-10-17 00:15:06 -04:00
f " **Discord.py Version:** { discord . __version__ } \n "
2025-10-09 01:00:00 -04:00
f " **Prefix:** / (Slash Commands) or { self . bot . bot_prefix } for normal commands "
)
2025-10-17 01:44:26 -04:00
embed1 = discord . Embed (
2025-09-16 10:21:36 -04:00
title = " Syntrel Discord Bot " ,
2025-10-09 01:00:00 -04:00
description = description_text ,
2025-09-15 08:44:54 -04:00
color = 0x7289DA ,
2025-09-14 18:54:56 -04:00
)
2025-10-17 01:44:26 -04:00
embed1 . set_author ( name = " Syntrel " , icon_url = " https://github.com/neoarz/Syntrel/blob/main/assets/icon.png?raw=true " )
embed1 . set_image ( url = " https://github.com/neoarz/Syntrel/raw/main/assets/bannerdark.png " )
embed1 . set_footer ( text = f " neoarz • { current_time } " , icon_url = " https://yes.nighty.works/raw/P1Us35.webp " )
embed2 = discord . Embed (
title = " Contributors " ,
description = " Giving credit where it ' s due! <a:pandasquish:1428617277317709915> " ,
color = 0x7289DA ,
)
contributors_image = generate_contributors_image ( )
2025-10-09 01:00:00 -04:00
view = BotInfoView ( self . bot )
2025-10-17 01:44:26 -04:00
if contributors_image :
file = discord . File ( contributors_image , filename = " contributors.png " )
embed2 . set_image ( url = " attachment://contributors.png " )
if context . interaction :
await context . interaction . followup . send ( embeds = [ embed1 , embed2 ] , file = file , view = view )
else :
await context . send ( embeds = [ embed1 , embed2 ] , file = file , view = view )
2025-09-15 09:00:02 -04:00
else :
2025-10-17 01:44:26 -04:00
if context . interaction :
await context . interaction . followup . send ( embeds = [ embed1 , embed2 ] , view = view )
else :
await context . send ( embeds = [ embed1 , embed2 ] , view = view )
2025-10-09 00:24:43 -04:00
async def setup ( bot ) - > None :
await bot . add_cog ( BotInfo ( bot ) )