# ╔══════════════════════════════════════════════════════════════════╗ # ║ ║ # ║ +-+-+-+-+-+-+-+-+ ║ # ║ |H|e|x|a|H|o|s|t| ║ # ║ +-+-+-+-+-+-+-+-+ ║ # ║ ║ # ║ © 2026 HexaHost — All Rights Reserved ║ # ║ ║ # ║ discord ── https://discord.gg/hexahost ║ # ║ github ── https://github.com/theoneandonlymace ║ # ║ ║ # ╚══════════════════════════════════════════════════════════════════╝ import asyncio import discord from utils.emoji import CROSS, TICK, ZWARNING, HEXAHOST_CONNECTION, HEXAHOST_LINKS from discord.ext import commands, tasks from discord.utils import get import datetime import random import requests import aiohttp import re from discord.ext.commands.errors import BadArgument from discord.ext.commands import Cog from discord.colour import Color import hashlib from utils.Tools import * from traceback import format_exception from discord import ButtonStyle from discord.ui import Button, View, LayoutView, TextDisplay, Separator, MediaGallery, ActionRow import psutil import time from datetime import datetime, timezone, timedelta import sqlite3 from typing import * import string from utils.cv2 import CV2, build_container class AvatarView(View): def __init__(self, user, member, author_id, banner_url): super().__init__() self.user = user self.member = member self.author_id = author_id self.banner_url = banner_url if self.user.avatar.is_animated(): self.add_item(Button(label='GIF', url=self.user.avatar.with_format('gif').url, style=discord.ButtonStyle.link)) self.add_item(Button(label='PNG', url=self.user.avatar.with_format('png').url, style=discord.ButtonStyle.link)) self.add_item(Button(label='JPEG', url=self.user.avatar.with_format('jpg').url, style=discord.ButtonStyle.link)) self.add_item(Button(label='WEBP', url=self.user.avatar.with_format('webp').url, style=discord.ButtonStyle.link)) async def interaction_check(self, interaction: discord.Interaction) -> bool: if interaction.user.id != self.author_id: await interaction.response.send_message( "Uh oh! That message doesn't belong to you. You must run this command to interact with it.", ephemeral=True ) return False return True @discord.ui.button(label='Server Avatar', style=discord.ButtonStyle.success, custom_id='server_avatar_button') async def server_avatar(self, interaction: discord.Interaction, button: Button): if not self.member.guild_avatar: await interaction.response.send_message( "This user doesn't have a different guild avatar.", ephemeral=True ) else: embed = interaction.message.embeds[0] embed.set_image(url=self.member.guild_avatar.url) await interaction.response.edit_message(embed=embed) @discord.ui.button(label='User Banner', style=discord.ButtonStyle.success, custom_id='banner_button') async def banner(self, interaction: discord.Interaction, button: Button): if not self.banner_url: await interaction.response.send_message( "This user doesn't have a banner.", ephemeral=True ) else: embed = interaction.message.embeds[0] embed.set_image(url=self.banner_url) await interaction.response.edit_message(embed=embed) from utils.config import BotName class General(commands.Cog): def __init__(self, bot, *args, **kwargs): self.bot = bot self.aiohttp = aiohttp.ClientSession() self._URL_REGEX = r'(?P<[^: >]+:\/[^ >]+>|(?:https?|steam):\/\/[^\s<]+[^<.,:;"\'\\]\s])' self.color = 0xFF0000 @commands.hybrid_command( usage="Avatar ", name='avatar', aliases=['av'], help="Get User avater/Guild avatar & Banner of a user." ) @blacklist_check() @ignore_check() @commands.cooldown(1, 3, commands.BucketType.user) async def _user(self, ctx, member: Optional[Union[discord.Member, discord.User]] = None): try: if member is None: member = ctx.author user = await self.bot.fetch_user(member.id) banner_url = user.banner.url if user.banner else None # Avatar still uses embed because AvatarView buttons edit embed images description = f"[`PNG`]({user.avatar.with_format('png').url}) | [`JPG`]({user.avatar.with_format('jpg').url}) | [`WEBP`]({user.avatar.with_format('webp').url})" if user.avatar.is_animated(): description += f" | [`GIF`]({user.avatar.with_format('gif').url})" if banner_url: description += f" | [`Banner`]({banner_url})" embed = discord.Embed( color=self.color, description=description ) embed.set_author(name=f"{member}", icon_url=member.avatar.url if member.avatar else member.default_avatar.url) embed.set_image(url=user.avatar.url) embed.set_footer(text=f"Requested By {ctx.author}", icon_url=ctx.author.avatar.url if ctx.author.avatar else ctx.author.default_avatar.url) view = AvatarView(user, member, ctx.author.id, banner_url) await ctx.send(embed=embed, view=view) except Exception as e: print(f"Error: {e}") @commands.hybrid_command( name="servericon", help="Get the server icon", usage="Servericon" ) @blacklist_check() @ignore_check() @commands.cooldown(1, 3, commands.BucketType.user) async def servericon(self, ctx: commands.Context): server = ctx.guild if server.icon is None: await ctx.reply(view=CV2("❌ Error", "This server does not have an icon.")) return webp = server.icon.replace(format='webp') jpg = server.icon.replace(format='jpg') png = server.icon.replace(format='png') links = f"[`PNG`]({png}) | [`JPG`]({jpg}) | [`WEBP`]({webp})" if server.icon.is_animated(): gif = server.icon.replace(format='gif') links += f" | [`GIF`]({gif})" view = LayoutView(timeout=None) gallery = MediaGallery() gallery.add_item(media=str(server.icon.url)) dl_btn = Button(label="Download Icon", url=str(server.icon.url), style=ButtonStyle.link) view.add_item(build_container( TextDisplay(f"**{server}'s Icon**"), Separator(visible=True), TextDisplay(links), gallery, ActionRow(dl_btn) )) await ctx.send(view=view) @commands.hybrid_command(name="membercount", help="Get total member count of the server", usage="membercount", aliases=["mc"]) @blacklist_check() @ignore_check() @commands.cooldown(1, 2, commands.BucketType.user) async def membercount(self, ctx: commands.Context): total_members = len(ctx.guild.members) total_humans = len([m for m in ctx.guild.members if not m.bot]) total_bots = len([m for m in ctx.guild.members if m.bot]) online = len([m for m in ctx.guild.members if m.status == discord.Status.online]) offline = len([m for m in ctx.guild.members if m.status == discord.Status.offline]) idle = len([m for m in ctx.guild.members if m.status == discord.Status.idle]) dnd = len([m for m in ctx.guild.members if m.status == discord.Status.do_not_disturb]) stats_text = ( f"**__Count Stats:__**\n" f"Total Members: {total_members}\nTotal Humans: {total_humans}\nTotal Bots: {total_bots}\n\n" f"**__Presence Stats:__**\n" f"Online: {online} | DND: {dnd} | Idle: {idle} | Offline: {offline}" ) await ctx.send(view=CV2("Member Statistics", stats_text)) @commands.hybrid_command(name="poll", usage="Poll ") @blacklist_check() @ignore_check() @commands.cooldown(1, 3, commands.BucketType.user) async def poll(self, ctx: commands.Context, *, message): author = ctx.author msg = await ctx.send(view=CV2(f"**Poll raised by {author}!**", message)) await msg.add_reaction(TICK) await msg.add_reaction(CROSS) @commands.command(name="users", help=f"checks total users of {BotName}.") @blacklist_check() @ignore_check() @commands.cooldown(1, 3, commands.BucketType.user) async def users(self, ctx: commands.Context): users = sum(g.member_count for g in self.bot.guilds if g.member_count != None) guilds = len(self.bot.guilds) await ctx.send(view=CV2(f"{BotName} Users", f"❯ Total of __**{users}**__ Users in **{guilds}** Guilds")) @commands.hybrid_command( name="urban", description="Searches for specified phrase on urbandictionary", help="Get meaning of specified phrase", usage="Urban ") @blacklist_check() @ignore_check() @commands.cooldown(1, 3, commands.BucketType.user) async def urban(self, ctx: commands.Context, *, phrase): async with self.aiohttp.get( "http://api.urbandictionary.com/v0/define?term={}".format( phrase)) as urb: urban = await urb.json() try: definition = urban['list'][0]['definition'].replace('[', '').replace(']', '') example = urban['list'][0]['example'].replace('[', '').replace(']', '') author = urban['list'][0]['author'].replace('[', '').replace(']', '') written_on = urban['list'][0]['written_on'].replace('[', '').replace(']', '') urban_text = ( f"**__Definition:__**\n{definition}\n\n" f"**__Example:__**\n{example}\n\n" f"**__Author:__** {author}\n" f"**__Written On:__** {written_on}" ) temp = await ctx.reply(view=CV2(f"Meaning of \"{phrase}\"", urban_text), mention_author=True) await asyncio.sleep(45) await temp.delete() await ctx.message.delete() except: pass @commands.command(name="rickroll", help="Detects if provided url is a rick-roll", usage="Rickroll ") @blacklist_check() @ignore_check() @commands.cooldown(1, 3, commands.BucketType.user) async def rickroll(self, ctx: commands.Context, *, url: str): if not re.match(self._URL_REGEX, url): raise BadArgument("Invalid URL") phrases = [ "rickroll", "rick roll", "rick astley", "never gonna give you up" ] source = str(await (await self.aiohttp.get( url, allow_redirects=True)).content.read()).lower() rickRoll = bool((re.findall('|'.join(phrases), source, re.MULTILINE | re.IGNORECASE))) title = "Rick Roll {} in webpage".format("was found" if rickRoll else "was not found") await ctx.reply(view=CV2(title, "🎵 Never gonna give you up..." if rickRoll else "✅ Safe to click!"), mention_author=True) @commands.command(name="hash", help="Hashes provided text with provided algorithm") @blacklist_check() @ignore_check() @commands.cooldown(1, 3, commands.BucketType.user) async def hash(self, ctx: commands.Context, algorithm: str, *, message): algos: dict[str, str] = { "md5": hashlib.md5(bytes(message.encode("utf-8"))).hexdigest(), "sha1": hashlib.sha1(bytes(message.encode("utf-8"))).hexdigest(), "sha224": hashlib.sha224(bytes(message.encode("utf-8"))).hexdigest(), "sha3_224": hashlib.sha3_224(bytes(message.encode("utf-8"))).hexdigest(), "sha256": hashlib.sha256(bytes(message.encode("utf-8"))).hexdigest(), "sha3_256": hashlib.sha3_256(bytes(message.encode("utf-8"))).hexdigest(), "sha384": hashlib.sha384(bytes(message.encode("utf-8"))).hexdigest(), "sha3_384": hashlib.sha3_384(bytes(message.encode("utf-8"))).hexdigest(), "sha512": hashlib.sha512(bytes(message.encode("utf-8"))).hexdigest(), "sha3_512": hashlib.sha3_512(bytes(message.encode("utf-8"))).hexdigest(), "blake2b": hashlib.blake2b(bytes(message.encode("utf-8"))).hexdigest(), "blake2s": hashlib.blake2s(bytes(message.encode("utf-8"))).hexdigest() } if algorithm.lower() not in list(algos.keys()): hash_lines = "\n".join(f"**{algo}:** `{algos[algo]}`" for algo in algos) else: hash_lines = f"**{algorithm}:** `{algos[algorithm.lower()]}`" await ctx.reply(view=CV2(f"Hashed \"{message}\"", hash_lines), mention_author=True) @commands.command( name="invite", aliases=['invite-bot'], description="Get Support & Bot invite link!" ) @blacklist_check() @ignore_check() @commands.cooldown(1, 3, commands.BucketType.user) async def invite(self, ctx: commands.Context): invite_text = ( "```Empower your server with blazing-fast features and 24/7 support!```\n" f"{HEXAHOST_LINKS} **Quick Actions**\n" f">>> **[Invite {BotName}](https://discord.com/oauth2/authorize?client_id=1396114795102470196&permissions=8&integration_type=0&scope=bot+applications.commands)**\n" "**[Support Server](https://discord.gg/hexahost)**" ) await ctx.send(view=CV2(f"{HEXAHOST_CONNECTION} {BotName} Integration Hub!", invite_text))