Files
2026-07-21 22:44:40 +02:00

156 lines
6.0 KiB
Python

# ╔══════════════════════════════════════════════════════════════════╗
# ║ ║
# ║ +-+-+-+-+-+-+-+-+ ║
# ║ |H|e|x|a|H|o|s|t| ║
# ║ +-+-+-+-+-+-+-+-+ ║
# ║ ║
# ║ © 2026 HexaHost — All Rights Reserved ║
# ║ ║
# ║ discord ── https://discord.gg/hexahost ║
# ║ github ── https://github.com/theoneandonlymace ║
# ║ ║
# ╚══════════════════════════════════════════════════════════════════╝
from utils.db_paths import db_path
from utils import getConfig
from utils.config import BotName, DISCORD_CLIENT_ID
import discord
from utils.emoji import ARROWRED, CODEBASE, HEART3, INDEX, AXIOM_LINKS
from discord.ui import LayoutView, TextDisplay, Separator, Container, ActionRow, Select
from discord.ext import commands
from utils.Tools import get_ignore_data
import aiosqlite
class MentionSelectView(LayoutView):
def __init__(self, message, bot, prefix):
super().__init__(timeout=300)
self.message = message
self.bot = bot
self.prefix = prefix
self.select = Select(
placeholder=f"Start With {BotName}",
options=[
discord.SelectOption(
label="Home",
emoji=INDEX,
description="Go to the main menu",
),
discord.SelectOption(
label="Developer Info",
emoji=CODEBASE,
description="See who created me",
),
discord.SelectOption(
label="Links",
emoji=AXIOM_LINKS,
description="Useful bot links",
),
],
)
self.select.callback = self.on_select
self.add_item(
Container(
TextDisplay(f"**{message.guild.name}**"),
Separator(visible=True),
TextDisplay(
f"> {HEART3} **Hey {message.author.mention}**\n"
f"> {ARROWRED} **Prefix For This Server: `{prefix}`**\n\n"
f"___Type `{prefix}help` for more information.___"
),
ActionRow(self.select),
)
)
async def on_select(self, interaction: discord.Interaction):
if interaction.user.id != self.message.author.id:
await interaction.response.send_message(
"This menu is not for you!", ephemeral=True
)
return
selected = interaction.data.get("values", ["Home"])[0]
if selected == "Home":
content = (
f"> {HEART3} **Hey {interaction.user.mention}**\n"
f"> {ARROWRED} **Prefix For This Server: `{self.prefix}`**\n\n"
f"___Type `{self.prefix}help` for more information.___"
)
elif selected == "Developer Info":
content = (
"There are only 2 Founders Who Created Me. Thanks You To Them 💞.\n\n"
"**The Founder**\n"
"**[01]. [Ray](https://discord.com/users/870179991462236170)**\n**[02]. [runxking](https://discord.com/users/767979794411028491)**"
)
elif selected == "Links":
content = (
f"**[Invite {BotName}](https://discord.com/oauth2/authorize?client_id={DISCORD_CLIENT_ID or (self.bot.user.id if self.bot.user else '')}&permissions=8&scope=bot%20applications.commands)**\n"
"**[Join Support Server](https://discord.gg/hexahost)**"
)
new_container = Container(
TextDisplay(f"**{self.message.guild.name}**"),
Separator(visible=True),
TextDisplay(content),
ActionRow(self.select),
)
self.clear_items()
self.add_item(new_container)
await interaction.response.edit_message(view=self)
class Mention(commands.Cog):
def __init__(self, bot):
self.bot = bot
self.color = 0xFF0000
self.bot_name = BotName
async def is_blacklisted(self, message):
async with aiosqlite.connect(db_path("block.db")) as db:
cursor = await db.execute(
"SELECT 1 FROM guild_blacklist WHERE guild_id = ?", (message.guild.id,)
)
if await cursor.fetchone():
return True
cursor = await db.execute(
"SELECT 1 FROM user_blacklist WHERE user_id = ?", (message.author.id,)
)
if await cursor.fetchone():
return True
return False
@commands.Cog.listener()
async def on_message(self, message: discord.Message):
if message.author.bot or not message.guild:
return
if await self.is_blacklisted(message):
return
ignore_data = await get_ignore_data(message.guild.id)
if (
str(message.author.id) in ignore_data["user"]
or str(message.channel.id) in ignore_data["channel"]
):
return
if (
self.bot.user in message.mentions
and len(message.content.strip().split()) == 1
):
guild_id = message.guild.id
data = await getConfig(guild_id)
prefix = data["prefix"]
view = MentionSelectView(message, self.bot, prefix)
await message.channel.send(view=view)
def setup(bot):
bot.add_cog(Mention(bot))