modified: aethex-bot/public/pricing.html
This commit is contained in:
parent
d07ccd0f53
commit
3a76186fc6
16 changed files with 58 additions and 58 deletions
2
.replit
2
.replit
|
|
@ -65,7 +65,7 @@ CORP_GUILD_ID = "373713073594302464"
|
||||||
FOUNDATION_GUILD_ID = "1338564560277344287"
|
FOUNDATION_GUILD_ID = "1338564560277344287"
|
||||||
WHITELISTED_USERS = "113472107526033408"
|
WHITELISTED_USERS = "113472107526033408"
|
||||||
ALERT_CHANNEL_ID = "1435905356932055233"
|
ALERT_CHANNEL_ID = "1435905356932055233"
|
||||||
BASE_URL = "https://bot.aethex.dev"
|
BASE_URL = "https://aethex.bot"
|
||||||
NEXUS_AUTH_URL = "https://aethex.tech"
|
NEXUS_AUTH_URL = "https://aethex.tech"
|
||||||
NEXUS_SERVICE_URL = "https://aethex.cloud"
|
NEXUS_SERVICE_URL = "https://aethex.cloud"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ STRIPE_PRICE_BRANDING_PRO=price_xxx
|
||||||
STRIPE_PRICE_BRANDING_ENTERPRISE=price_xxx
|
STRIPE_PRICE_BRANDING_ENTERPRISE=price_xxx
|
||||||
|
|
||||||
# OAuth & Web Dashboard
|
# OAuth & Web Dashboard
|
||||||
BASE_URL=https://bot.aethex.dev
|
BASE_URL=https://aethex.bot
|
||||||
SESSION_SECRET=random_secret_string
|
SESSION_SECRET=random_secret_string
|
||||||
|
|
||||||
# Optional: AeThex Realm Guild IDs
|
# Optional: AeThex Realm Guild IDs
|
||||||
|
|
|
||||||
|
|
@ -609,7 +609,7 @@ client.on('guildCreate', async (guild) => {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '📖 Need Help?',
|
name: '📖 Need Help?',
|
||||||
value: '[Documentation](https://bot.aethex.dev/commands) • [Support Server](https://discord.gg/aethex)'
|
value: '[Documentation](https://aethex.bot/commands) • [Support Server](https://discord.gg/aethex)'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
footer: { text: 'AeThex Bot • Powering Communities' },
|
footer: { text: 'AeThex Bot • Powering Communities' },
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ module.exports = {
|
||||||
.setDescription('Claim your custom URL handle (Pro tier+)')
|
.setDescription('Claim your custom URL handle (Pro tier+)')
|
||||||
.addStringOption(opt => opt
|
.addStringOption(opt => opt
|
||||||
.setName('handle')
|
.setName('handle')
|
||||||
.setDescription('Your custom handle (aethex.dev/YOUR-HANDLE)')
|
.setDescription('Your custom handle (aethex.bot/YOUR-HANDLE)')
|
||||||
.setRequired(true)
|
.setRequired(true)
|
||||||
.setMinLength(3)
|
.setMinLength(3)
|
||||||
.setMaxLength(30)
|
.setMaxLength(30)
|
||||||
|
|
@ -132,7 +132,7 @@ module.exports = {
|
||||||
{ name: 'Custom Footer', value: branding.custom_footer_text || '*Not set*', inline: true },
|
{ name: 'Custom Footer', value: branding.custom_footer_text || '*Not set*', inline: true },
|
||||||
{ name: 'Embed Color', value: branding.custom_embed_color || '*Default*', inline: true },
|
{ name: 'Embed Color', value: branding.custom_embed_color || '*Default*', inline: true },
|
||||||
{ name: 'Custom Avatar', value: branding.custom_bot_avatar_url ? '✅ Set' : '*Not set*', inline: true },
|
{ name: 'Custom Avatar', value: branding.custom_bot_avatar_url ? '✅ Set' : '*Not set*', inline: true },
|
||||||
{ name: 'Custom Handle', value: branding.custom_handle ? `aethex.dev/${branding.custom_handle}` : '*Not claimed*', inline: true },
|
{ name: 'Custom Handle', value: branding.custom_handle ? `aethex.bot/${branding.custom_handle}` : '*Not claimed*', inline: true },
|
||||||
{ name: 'Landing Page', value: branding.landing_title ? '✅ Configured' : '*Not set*', inline: true }
|
{ name: 'Landing Page', value: branding.landing_title ? '✅ Configured' : '*Not set*', inline: true }
|
||||||
)
|
)
|
||||||
.setFooter({ text: 'Use /branding tiers to see upgrade options' })
|
.setFooter({ text: 'Use /branding tiers to see upgrade options' })
|
||||||
|
|
@ -146,11 +146,11 @@ module.exports = {
|
||||||
.addComponents(
|
.addComponents(
|
||||||
new ButtonBuilder()
|
new ButtonBuilder()
|
||||||
.setLabel('Manage on Dashboard')
|
.setLabel('Manage on Dashboard')
|
||||||
.setURL(`https://bot.aethex.dev/dashboard?guild=${guildId}&page=branding`)
|
.setURL(`https://aethex.bot/dashboard?guild=${guildId}&page=branding`)
|
||||||
.setStyle(ButtonStyle.Link),
|
.setStyle(ButtonStyle.Link),
|
||||||
new ButtonBuilder()
|
new ButtonBuilder()
|
||||||
.setLabel('Upgrade Tier')
|
.setLabel('Upgrade Tier')
|
||||||
.setURL('https://bot.aethex.dev/pricing#branding')
|
.setURL('https://aethex.bot/pricing#branding')
|
||||||
.setStyle(ButtonStyle.Link)
|
.setStyle(ButtonStyle.Link)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -176,7 +176,7 @@ module.exports = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '⭐ Pro - $35/mo',
|
name: '⭐ Pro - $35/mo',
|
||||||
value: '• Everything in Basic\n• Custom bot avatar\n• Custom URL handle\n• Landing page\n• `aethex.dev/your-name`',
|
value: '• Everything in Basic\n• Custom bot avatar\n• Custom URL handle\n• Landing page\n• `aethex.bot/your-name`',
|
||||||
inline: true
|
inline: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -191,7 +191,7 @@ module.exports = {
|
||||||
.addComponents(
|
.addComponents(
|
||||||
new ButtonBuilder()
|
new ButtonBuilder()
|
||||||
.setLabel('Subscribe Now')
|
.setLabel('Subscribe Now')
|
||||||
.setURL('https://bot.aethex.dev/pricing#branding')
|
.setURL('https://aethex.bot/pricing#branding')
|
||||||
.setStyle(ButtonStyle.Link)
|
.setStyle(ButtonStyle.Link)
|
||||||
.setEmoji('💳')
|
.setEmoji('💳')
|
||||||
);
|
);
|
||||||
|
|
@ -327,7 +327,7 @@ module.exports = {
|
||||||
new EmbedBuilder()
|
new EmbedBuilder()
|
||||||
.setColor('#22c55e')
|
.setColor('#22c55e')
|
||||||
.setTitle('✅ Handle Claimed!')
|
.setTitle('✅ Handle Claimed!')
|
||||||
.setDescription(`Your community page is now live at:\n\n🔗 **https://bot.aethex.dev/${result.handle}**`)
|
.setDescription(`Your community page is now live at:\n\n🔗 **https://aethex.bot/${result.handle}**`)
|
||||||
.addFields(
|
.addFields(
|
||||||
{ name: 'Configure Your Page', value: 'Use `/branding landing` to customize your page content.' }
|
{ name: 'Configure Your Page', value: 'Use `/branding landing` to customize your page content.' }
|
||||||
)
|
)
|
||||||
|
|
@ -380,7 +380,7 @@ module.exports = {
|
||||||
new EmbedBuilder()
|
new EmbedBuilder()
|
||||||
.setColor('#22c55e')
|
.setColor('#22c55e')
|
||||||
.setTitle('✅ Landing Page Updated')
|
.setTitle('✅ Landing Page Updated')
|
||||||
.setDescription(`View your page at:\n🔗 **https://bot.aethex.dev/${branding.custom_handle}**`)
|
.setDescription(`View your page at:\n🔗 **https://aethex.bot/${branding.custom_handle}**`)
|
||||||
.addFields(
|
.addFields(
|
||||||
Object.entries(updates).map(([key, value]) => ({
|
Object.entries(updates).map(([key, value]) => ({
|
||||||
name: key.replace('landing_', '').replace('_', ' '),
|
name: key.replace('landing_', '').replace('_', ' '),
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,7 @@ async function sendPostToDiscord(post, authorInfo = null) {
|
||||||
const rawAvatar = author?.avatar_url || "";
|
const rawAvatar = author?.avatar_url || "";
|
||||||
const authorAvatar = rawAvatar.startsWith("http://") || rawAvatar.startsWith("https://")
|
const authorAvatar = rawAvatar.startsWith("http://") || rawAvatar.startsWith("https://")
|
||||||
? rawAvatar
|
? rawAvatar
|
||||||
: "https://aethex.dev/logo.png";
|
: "https://aethex.bot/logo.png";
|
||||||
const arm = post.arm_affiliation || "labs";
|
const arm = post.arm_affiliation || "labs";
|
||||||
|
|
||||||
const embed = new EmbedBuilder()
|
const embed = new EmbedBuilder()
|
||||||
|
|
@ -94,13 +94,13 @@ async function sendPostToDiscord(post, authorInfo = null) {
|
||||||
.setAuthor({
|
.setAuthor({
|
||||||
name: `${getArmEmoji(arm)} ${authorName}`,
|
name: `${getArmEmoji(arm)} ${authorName}`,
|
||||||
iconURL: authorAvatar,
|
iconURL: authorAvatar,
|
||||||
url: `https://aethex.dev/creators/${author?.username || post.author_id}`,
|
url: `https://aethex.bot/creators/${author?.username || post.author_id}`,
|
||||||
})
|
})
|
||||||
.setDescription(content.text || post.title || "New post")
|
.setDescription(content.text || post.title || "New post")
|
||||||
.setTimestamp(post.created_at ? new Date(post.created_at) : new Date())
|
.setTimestamp(post.created_at ? new Date(post.created_at) : new Date())
|
||||||
.setFooter({
|
.setFooter({
|
||||||
text: `Posted from AeThex • ${arm.charAt(0).toUpperCase() + arm.slice(1)}`,
|
text: `Posted from AeThex • ${arm.charAt(0).toUpperCase() + arm.slice(1)}`,
|
||||||
iconURL: "https://aethex.dev/logo.png",
|
iconURL: "https://aethex.bot/logo.png",
|
||||||
});
|
});
|
||||||
|
|
||||||
if (content.mediaUrl) {
|
if (content.mediaUrl) {
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ CREATE TABLE IF NOT EXISTS server_branding (
|
||||||
custom_footer_text VARCHAR(200),
|
custom_footer_text VARCHAR(200),
|
||||||
custom_embed_color VARCHAR(10),
|
custom_embed_color VARCHAR(10),
|
||||||
|
|
||||||
-- Custom Handle (aethex.dev/{handle})
|
-- Custom Handle (aethex.bot/{handle})
|
||||||
custom_handle VARCHAR(50) UNIQUE,
|
custom_handle VARCHAR(50) UNIQUE,
|
||||||
handle_verified BOOLEAN DEFAULT false,
|
handle_verified BOOLEAN DEFAULT false,
|
||||||
|
|
||||||
|
|
@ -98,5 +98,5 @@ ON CONFLICT (handle) DO NOTHING;
|
||||||
-- Enterprise ($75/mo): + Analytics, priority support, custom domain support
|
-- Enterprise ($75/mo): + Analytics, priority support, custom domain support
|
||||||
|
|
||||||
COMMENT ON TABLE server_branding IS 'White-label branding configuration for servers';
|
COMMENT ON TABLE server_branding IS 'White-label branding configuration for servers';
|
||||||
COMMENT ON COLUMN server_branding.custom_handle IS 'Custom URL handle at aethex.dev/{handle}';
|
COMMENT ON COLUMN server_branding.custom_handle IS 'Custom URL handle at aethex.bot/{handle}';
|
||||||
COMMENT ON COLUMN server_branding.tier IS 'Branding tier: free, basic, pro, enterprise';
|
COMMENT ON COLUMN server_branding.tier IS 'Branding tier: free, basic, pro, enterprise';
|
||||||
|
|
|
||||||
|
|
@ -8,20 +8,20 @@
|
||||||
<meta name="keywords" content="Discord bot commands, slash commands, moderation commands, leveling commands, fun commands, economy commands, admin commands, AI commands">
|
<meta name="keywords" content="Discord bot commands, slash commands, moderation commands, leveling commands, fun commands, economy commands, admin commands, AI commands">
|
||||||
<meta name="author" content="AeThex">
|
<meta name="author" content="AeThex">
|
||||||
<meta name="robots" content="index, follow">
|
<meta name="robots" content="index, follow">
|
||||||
<link rel="canonical" href="https://bot.aethex.dev/commands">
|
<link rel="canonical" href="https://aethex.bot/commands">
|
||||||
|
|
||||||
<meta property="og:type" content="website">
|
<meta property="og:type" content="website">
|
||||||
<meta property="og:url" content="https://bot.aethex.dev/commands">
|
<meta property="og:url" content="https://aethex.bot/commands">
|
||||||
<meta property="og:title" content="Commands | AeThex Warden - Discord Bot">
|
<meta property="og:title" content="Commands | AeThex Warden - Discord Bot">
|
||||||
<meta property="og:description" content="Complete list of all 75+ Warden Discord bot commands organized by category. Leveling, moderation, fun, economy, AI, and admin commands.">
|
<meta property="og:description" content="Complete list of all 75+ Warden Discord bot commands organized by category. Leveling, moderation, fun, economy, AI, and admin commands.">
|
||||||
<meta property="og:image" content="https://bot.aethex.dev/og-image.png">
|
<meta property="og:image" content="https://aethex.bot/og-image.png">
|
||||||
<meta property="og:site_name" content="AeThex Warden">
|
<meta property="og:site_name" content="AeThex Warden">
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary_large_image">
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
<meta name="twitter:url" content="https://bot.aethex.dev/commands">
|
<meta name="twitter:url" content="https://aethex.bot/commands">
|
||||||
<meta name="twitter:title" content="Commands | AeThex Warden - Discord Bot">
|
<meta name="twitter:title" content="Commands | AeThex Warden - Discord Bot">
|
||||||
<meta name="twitter:description" content="Complete list of all 75+ Warden Discord bot commands organized by category.">
|
<meta name="twitter:description" content="Complete list of all 75+ Warden Discord bot commands organized by category.">
|
||||||
<meta name="twitter:image" content="https://bot.aethex.dev/og-image.png">
|
<meta name="twitter:image" content="https://aethex.bot/og-image.png">
|
||||||
|
|
||||||
<meta name="theme-color" content="#6366f1">
|
<meta name="theme-color" content="#6366f1">
|
||||||
<link rel="icon" href="/logo.png" type="image/png">
|
<link rel="icon" href="/logo.png" type="image/png">
|
||||||
|
|
|
||||||
|
|
@ -451,7 +451,7 @@
|
||||||
|
|
||||||
// Name and handle
|
// Name and handle
|
||||||
document.getElementById('name').textContent = data.title || data.name;
|
document.getElementById('name').textContent = data.title || data.name;
|
||||||
document.getElementById('handle').textContent = `aethex.dev/${data.handle}`;
|
document.getElementById('handle').textContent = `aethex.bot/${data.handle}`;
|
||||||
|
|
||||||
// Tier badge
|
// Tier badge
|
||||||
if (data.tier === 'pro' || data.tier === 'enterprise') {
|
if (data.tier === 'pro' || data.tier === 'enterprise') {
|
||||||
|
|
|
||||||
|
|
@ -2552,7 +2552,7 @@
|
||||||
<div class="form-group" style="margin-bottom:1rem">
|
<div class="form-group" style="margin-bottom:1rem">
|
||||||
<label class="form-label">Your Handle</label>
|
<label class="form-label">Your Handle</label>
|
||||||
<div style="display:flex;gap:0.5rem;align-items:center">
|
<div style="display:flex;gap:0.5rem;align-items:center">
|
||||||
<span style="color:var(--muted)">aethex.dev/</span>
|
<span style="color:var(--muted)">aethex.bot/</span>
|
||||||
<input type="text" class="form-input" id="brandingHandle" placeholder="your-community" maxlength="50" style="flex:1">
|
<input type="text" class="form-input" id="brandingHandle" placeholder="your-community" maxlength="50" style="flex:1">
|
||||||
</div>
|
</div>
|
||||||
<small style="color:var(--muted)">Alphanumeric and hyphens only, 3-50 characters</small>
|
<small style="color:var(--muted)">Alphanumeric and hyphens only, 3-50 characters</small>
|
||||||
|
|
@ -2571,7 +2571,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<ul style="list-style:none;padding:0">
|
<ul style="list-style:none;padding:0">
|
||||||
<li style="padding:0.5rem 0;border-bottom:1px solid var(--border)">✅ Custom URL: <code>aethex.dev/your-handle</code></li>
|
<li style="padding:0.5rem 0;border-bottom:1px solid var(--border)">✅ Custom URL: <code>aethex.bot/your-handle</code></li>
|
||||||
<li style="padding:0.5rem 0;border-bottom:1px solid var(--border)">✅ Community landing page</li>
|
<li style="padding:0.5rem 0;border-bottom:1px solid var(--border)">✅ Community landing page</li>
|
||||||
<li style="padding:0.5rem 0;border-bottom:1px solid var(--border)">✅ SEO-friendly presence</li>
|
<li style="padding:0.5rem 0;border-bottom:1px solid var(--border)">✅ SEO-friendly presence</li>
|
||||||
<li style="padding:0.5rem 0">✅ Analytics (Enterprise)</li>
|
<li style="padding:0.5rem 0">✅ Analytics (Enterprise)</li>
|
||||||
|
|
@ -5052,7 +5052,7 @@
|
||||||
// Handle
|
// Handle
|
||||||
document.getElementById('brandingHandle').value = data.custom_handle || '';
|
document.getElementById('brandingHandle').value = data.custom_handle || '';
|
||||||
if (data.custom_handle) {
|
if (data.custom_handle) {
|
||||||
document.getElementById('handleStatusText').textContent = '✅ Handle claimed: aethex.dev/' + data.custom_handle;
|
document.getElementById('handleStatusText').textContent = '✅ Handle claimed: aethex.bot/' + data.custom_handle;
|
||||||
document.getElementById('handleStatus').style.background = 'rgba(16,185,129,0.2)';
|
document.getElementById('handleStatus').style.background = 'rgba(16,185,129,0.2)';
|
||||||
document.getElementById('viewLandingBtn').href = '/' + data.custom_handle;
|
document.getElementById('viewLandingBtn').href = '/' + data.custom_handle;
|
||||||
document.getElementById('viewLandingBtn').style.display = 'inline-block';
|
document.getElementById('viewLandingBtn').style.display = 'inline-block';
|
||||||
|
|
|
||||||
|
|
@ -8,20 +8,20 @@
|
||||||
<meta name="keywords" content="Discord bot features, XP system, leveling bot, Discord moderation, economy bot, achievement system, quest system, Discord games">
|
<meta name="keywords" content="Discord bot features, XP system, leveling bot, Discord moderation, economy bot, achievement system, quest system, Discord games">
|
||||||
<meta name="author" content="AeThex">
|
<meta name="author" content="AeThex">
|
||||||
<meta name="robots" content="index, follow">
|
<meta name="robots" content="index, follow">
|
||||||
<link rel="canonical" href="https://bot.aethex.dev/features">
|
<link rel="canonical" href="https://aethex.bot/features">
|
||||||
|
|
||||||
<meta property="og:type" content="website">
|
<meta property="og:type" content="website">
|
||||||
<meta property="og:url" content="https://bot.aethex.dev/features">
|
<meta property="og:url" content="https://aethex.bot/features">
|
||||||
<meta property="og:title" content="Features | AeThex Warden - Discord Bot">
|
<meta property="og:title" content="Features | AeThex Warden - Discord Bot">
|
||||||
<meta property="og:description" content="Explore all features of Warden - XP systems, moderation, games, economy, achievements, quests, and more for your Discord community.">
|
<meta property="og:description" content="Explore all features of Warden - XP systems, moderation, games, economy, achievements, quests, and more for your Discord community.">
|
||||||
<meta property="og:image" content="https://bot.aethex.dev/og-image.png">
|
<meta property="og:image" content="https://aethex.bot/og-image.png">
|
||||||
<meta property="og:site_name" content="AeThex Warden">
|
<meta property="og:site_name" content="AeThex Warden">
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary_large_image">
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
<meta name="twitter:url" content="https://bot.aethex.dev/features">
|
<meta name="twitter:url" content="https://aethex.bot/features">
|
||||||
<meta name="twitter:title" content="Features | AeThex Warden - Discord Bot">
|
<meta name="twitter:title" content="Features | AeThex Warden - Discord Bot">
|
||||||
<meta name="twitter:description" content="Explore all features of Warden - XP systems, moderation, games, economy, achievements, quests, and more.">
|
<meta name="twitter:description" content="Explore all features of Warden - XP systems, moderation, games, economy, achievements, quests, and more.">
|
||||||
<meta name="twitter:image" content="https://bot.aethex.dev/og-image.png">
|
<meta name="twitter:image" content="https://aethex.bot/og-image.png">
|
||||||
|
|
||||||
<meta name="theme-color" content="#6366f1">
|
<meta name="theme-color" content="#6366f1">
|
||||||
<link rel="icon" href="/logo.png" type="image/png">
|
<link rel="icon" href="/logo.png" type="image/png">
|
||||||
|
|
|
||||||
|
|
@ -8,20 +8,20 @@
|
||||||
<meta name="keywords" content="Discord federation, server protection, shared ban list, Discord security, anti-raid, global bans, Discord moderation network">
|
<meta name="keywords" content="Discord federation, server protection, shared ban list, Discord security, anti-raid, global bans, Discord moderation network">
|
||||||
<meta name="author" content="AeThex">
|
<meta name="author" content="AeThex">
|
||||||
<meta name="robots" content="index, follow">
|
<meta name="robots" content="index, follow">
|
||||||
<link rel="canonical" href="https://bot.aethex.dev/federation">
|
<link rel="canonical" href="https://aethex.bot/federation">
|
||||||
|
|
||||||
<meta property="og:type" content="website">
|
<meta property="og:type" content="website">
|
||||||
<meta property="og:url" content="https://bot.aethex.dev/federation">
|
<meta property="og:url" content="https://aethex.bot/federation">
|
||||||
<meta property="og:title" content="The Federation - AeThex | Warden">
|
<meta property="og:title" content="The Federation - AeThex | Warden">
|
||||||
<meta property="og:description" content="A network of protected Discord servers. When one server bans a bad actor, every federation member is protected. Ban one, ban all.">
|
<meta property="og:description" content="A network of protected Discord servers. When one server bans a bad actor, every federation member is protected. Ban one, ban all.">
|
||||||
<meta property="og:image" content="https://bot.aethex.dev/og-image.png">
|
<meta property="og:image" content="https://aethex.bot/og-image.png">
|
||||||
<meta property="og:site_name" content="AeThex Warden">
|
<meta property="og:site_name" content="AeThex Warden">
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary_large_image">
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
<meta name="twitter:url" content="https://bot.aethex.dev/federation">
|
<meta name="twitter:url" content="https://aethex.bot/federation">
|
||||||
<meta name="twitter:title" content="The Federation - AeThex | Warden">
|
<meta name="twitter:title" content="The Federation - AeThex | Warden">
|
||||||
<meta name="twitter:description" content="A network of protected Discord servers. When one server bans a bad actor, every federation member is protected.">
|
<meta name="twitter:description" content="A network of protected Discord servers. When one server bans a bad actor, every federation member is protected.">
|
||||||
<meta name="twitter:image" content="https://bot.aethex.dev/og-image.png">
|
<meta name="twitter:image" content="https://aethex.bot/og-image.png">
|
||||||
|
|
||||||
<meta name="theme-color" content="#6366f1">
|
<meta name="theme-color" content="#6366f1">
|
||||||
<link rel="icon" href="/logo.png" type="image/png">
|
<link rel="icon" href="/logo.png" type="image/png">
|
||||||
|
|
|
||||||
|
|
@ -8,21 +8,21 @@
|
||||||
<meta name="keywords" content="Discord bot, XP leveling, Discord moderation, Discord security, anti-nuke, federation, cross-server, AeThex, Warden, community bot">
|
<meta name="keywords" content="Discord bot, XP leveling, Discord moderation, Discord security, anti-nuke, federation, cross-server, AeThex, Warden, community bot">
|
||||||
<meta name="author" content="AeThex">
|
<meta name="author" content="AeThex">
|
||||||
<meta name="robots" content="index, follow">
|
<meta name="robots" content="index, follow">
|
||||||
<link rel="canonical" href="https://bot.aethex.dev/">
|
<link rel="canonical" href="https://aethex.bot/">
|
||||||
|
|
||||||
<meta property="og:type" content="website">
|
<meta property="og:type" content="website">
|
||||||
<meta property="og:url" content="https://bot.aethex.dev/">
|
<meta property="og:url" content="https://aethex.bot/">
|
||||||
<meta property="og:title" content="AeThex | Warden - Guardian of the AeThex Ecosystem">
|
<meta property="og:title" content="AeThex | Warden - Guardian of the AeThex Ecosystem">
|
||||||
<meta property="og:description" content="The unified Discord bot that connects the entire AeThex network. Cross-server XP, unified profiles, federation sync, and enterprise security. Free forever.">
|
<meta property="og:description" content="The unified Discord bot that connects the entire AeThex network. Cross-server XP, unified profiles, federation sync, and enterprise security. Free forever.">
|
||||||
<meta property="og:image" content="https://bot.aethex.dev/og-image.png">
|
<meta property="og:image" content="https://aethex.bot/og-image.png">
|
||||||
<meta property="og:site_name" content="AeThex Warden">
|
<meta property="og:site_name" content="AeThex Warden">
|
||||||
<meta property="og:locale" content="en_US">
|
<meta property="og:locale" content="en_US">
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary_large_image">
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
<meta name="twitter:url" content="https://bot.aethex.dev/">
|
<meta name="twitter:url" content="https://aethex.bot/">
|
||||||
<meta name="twitter:title" content="AeThex | Warden - Guardian of the AeThex Ecosystem">
|
<meta name="twitter:title" content="AeThex | Warden - Guardian of the AeThex Ecosystem">
|
||||||
<meta name="twitter:description" content="The unified Discord bot that connects the entire AeThex network. Cross-server XP, unified profiles, federation sync, and enterprise security. Free forever.">
|
<meta name="twitter:description" content="The unified Discord bot that connects the entire AeThex network. Cross-server XP, unified profiles, federation sync, and enterprise security. Free forever.">
|
||||||
<meta name="twitter:image" content="https://bot.aethex.dev/og-image.png">
|
<meta name="twitter:image" content="https://aethex.bot/og-image.png">
|
||||||
|
|
||||||
<meta name="theme-color" content="#6366f1">
|
<meta name="theme-color" content="#6366f1">
|
||||||
<link rel="icon" href="/logo.png" type="image/png">
|
<link rel="icon" href="/logo.png" type="image/png">
|
||||||
|
|
@ -45,7 +45,7 @@
|
||||||
"name": "AeThex",
|
"name": "AeThex",
|
||||||
"url": "https://aethex.studio"
|
"url": "https://aethex.studio"
|
||||||
},
|
},
|
||||||
"url": "https://bot.aethex.dev",
|
"url": "https://aethex.bot",
|
||||||
"aggregateRating": {
|
"aggregateRating": {
|
||||||
"@type": "AggregateRating",
|
"@type": "AggregateRating",
|
||||||
"ratingValue": "5",
|
"ratingValue": "5",
|
||||||
|
|
|
||||||
|
|
@ -8,20 +8,20 @@
|
||||||
<meta name="keywords" content="Discord bot pricing, free Discord bot, premium Discord bot, federation pricing, Discord moderation pricing">
|
<meta name="keywords" content="Discord bot pricing, free Discord bot, premium Discord bot, federation pricing, Discord moderation pricing">
|
||||||
<meta name="author" content="AeThex">
|
<meta name="author" content="AeThex">
|
||||||
<meta name="robots" content="index, follow">
|
<meta name="robots" content="index, follow">
|
||||||
<link rel="canonical" href="https://bot.aethex.dev/pricing">
|
<link rel="canonical" href="https://aethex.bot/pricing">
|
||||||
|
|
||||||
<meta property="og:type" content="website">
|
<meta property="og:type" content="website">
|
||||||
<meta property="og:url" content="https://bot.aethex.dev/pricing">
|
<meta property="og:url" content="https://aethex.bot/pricing">
|
||||||
<meta property="og:title" content="Pricing - AeThex | Warden - Discord Bot">
|
<meta property="og:title" content="Pricing - AeThex | Warden - Discord Bot">
|
||||||
<meta property="og:description" content="Warden is free forever for all core features. Join the Federation for advanced protection.">
|
<meta property="og:description" content="Warden is free forever for all core features. Join the Federation for advanced protection.">
|
||||||
<meta property="og:image" content="https://bot.aethex.dev/og-image.png">
|
<meta property="og:image" content="https://aethex.bot/og-image.png">
|
||||||
<meta property="og:site_name" content="AeThex Warden">
|
<meta property="og:site_name" content="AeThex Warden">
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary_large_image">
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
<meta name="twitter:url" content="https://bot.aethex.dev/pricing">
|
<meta name="twitter:url" content="https://aethex.bot/pricing">
|
||||||
<meta name="twitter:title" content="Pricing - AeThex | Warden - Discord Bot">
|
<meta name="twitter:title" content="Pricing - AeThex | Warden - Discord Bot">
|
||||||
<meta name="twitter:description" content="Warden is free forever for all core features. Join the Federation for advanced protection.">
|
<meta name="twitter:description" content="Warden is free forever for all core features. Join the Federation for advanced protection.">
|
||||||
<meta name="twitter:image" content="https://bot.aethex.dev/og-image.png">
|
<meta name="twitter:image" content="https://aethex.bot/og-image.png">
|
||||||
|
|
||||||
<meta name="theme-color" content="#6366f1">
|
<meta name="theme-color" content="#6366f1">
|
||||||
<link rel="icon" href="/logo.png" type="image/png">
|
<link rel="icon" href="/logo.png" type="image/png">
|
||||||
|
|
|
||||||
|
|
@ -4,4 +4,4 @@ Disallow: /dashboard
|
||||||
Disallow: /auth/
|
Disallow: /auth/
|
||||||
Disallow: /api/
|
Disallow: /api/
|
||||||
|
|
||||||
Sitemap: https://bot.aethex.dev/sitemap.xml
|
Sitemap: https://aethex.bot/sitemap.xml
|
||||||
|
|
|
||||||
|
|
@ -1,31 +1,31 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||||
<url>
|
<url>
|
||||||
<loc>https://bot.aethex.dev/</loc>
|
<loc>https://aethex.bot/</loc>
|
||||||
<lastmod>2025-01-01</lastmod>
|
<lastmod>2025-01-01</lastmod>
|
||||||
<changefreq>weekly</changefreq>
|
<changefreq>weekly</changefreq>
|
||||||
<priority>1.0</priority>
|
<priority>1.0</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://bot.aethex.dev/features</loc>
|
<loc>https://aethex.bot/features</loc>
|
||||||
<lastmod>2025-01-01</lastmod>
|
<lastmod>2025-01-01</lastmod>
|
||||||
<changefreq>monthly</changefreq>
|
<changefreq>monthly</changefreq>
|
||||||
<priority>0.9</priority>
|
<priority>0.9</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://bot.aethex.dev/commands</loc>
|
<loc>https://aethex.bot/commands</loc>
|
||||||
<lastmod>2025-01-01</lastmod>
|
<lastmod>2025-01-01</lastmod>
|
||||||
<changefreq>monthly</changefreq>
|
<changefreq>monthly</changefreq>
|
||||||
<priority>0.9</priority>
|
<priority>0.9</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://bot.aethex.dev/pricing</loc>
|
<loc>https://aethex.bot/pricing</loc>
|
||||||
<lastmod>2025-01-01</lastmod>
|
<lastmod>2025-01-01</lastmod>
|
||||||
<changefreq>monthly</changefreq>
|
<changefreq>monthly</changefreq>
|
||||||
<priority>0.8</priority>
|
<priority>0.8</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://bot.aethex.dev/federation</loc>
|
<loc>https://aethex.bot/federation</loc>
|
||||||
<lastmod>2025-01-01</lastmod>
|
<lastmod>2025-01-01</lastmod>
|
||||||
<changefreq>monthly</changefreq>
|
<changefreq>monthly</changefreq>
|
||||||
<priority>0.8</priority>
|
<priority>0.8</priority>
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ function createWebServer(discordClient, supabase, options = {}) {
|
||||||
const DISCORD_CLIENT_SECRET = process.env.DISCORD_CLIENT_SECRET;
|
const DISCORD_CLIENT_SECRET = process.env.DISCORD_CLIENT_SECRET;
|
||||||
const SESSION_SECRET = process.env.SESSION_SECRET || crypto.randomBytes(32).toString('hex');
|
const SESSION_SECRET = process.env.SESSION_SECRET || crypto.randomBytes(32).toString('hex');
|
||||||
// Production URL for OAuth
|
// Production URL for OAuth
|
||||||
const BASE_URL = process.env.BASE_URL || 'https://bot.aethex.dev';
|
const BASE_URL = process.env.BASE_URL || 'https://aethex.bot';
|
||||||
|
|
||||||
app.use(cors({
|
app.use(cors({
|
||||||
origin: true,
|
origin: true,
|
||||||
|
|
@ -363,7 +363,7 @@ function createWebServer(discordClient, supabase, options = {}) {
|
||||||
// Route for specific user's profile
|
// Route for specific user's profile
|
||||||
app.get('/api/profile/:userId', (req, res) => handleProfileRequest(req, res, req.params.userId));
|
app.get('/api/profile/:userId', (req, res) => handleProfileRequest(req, res, req.params.userId));
|
||||||
|
|
||||||
// Verification callback endpoint - called by aethex.dev when user verifies
|
// Verification callback endpoint - called by aethex.bot when user verifies
|
||||||
app.post('/api/verify-callback', async (req, res) => {
|
app.post('/api/verify-callback', async (req, res) => {
|
||||||
if (!supabase) {
|
if (!supabase) {
|
||||||
return res.status(503).json({ error: 'Database not available' });
|
return res.status(503).json({ error: 'Database not available' });
|
||||||
|
|
@ -371,7 +371,7 @@ function createWebServer(discordClient, supabase, options = {}) {
|
||||||
|
|
||||||
const { discord_id, user_id, secret } = req.body;
|
const { discord_id, user_id, secret } = req.body;
|
||||||
|
|
||||||
// Verify the callback secret (should match what aethex.dev uses)
|
// Verify the callback secret (should match what aethex.bot uses)
|
||||||
const expectedSecret = process.env.VERIFY_CALLBACK_SECRET;
|
const expectedSecret = process.env.VERIFY_CALLBACK_SECRET;
|
||||||
if (expectedSecret && secret !== expectedSecret) {
|
if (expectedSecret && secret !== expectedSecret) {
|
||||||
return res.status(401).json({ error: 'Invalid callback secret' });
|
return res.status(401).json({ error: 'Invalid callback secret' });
|
||||||
|
|
@ -404,7 +404,7 @@ function createWebServer(discordClient, supabase, options = {}) {
|
||||||
const role = guild.roles.cache.get(config.verified_role_id);
|
const role = guild.roles.cache.get(config.verified_role_id);
|
||||||
if (!role) continue;
|
if (!role) continue;
|
||||||
|
|
||||||
await member.roles.add(role, 'Account verified via aethex.dev');
|
await member.roles.add(role, 'Account verified via aethex.bot');
|
||||||
rolesAssigned++;
|
rolesAssigned++;
|
||||||
console.log(`[Verify] Assigned verified role to ${member.user.tag} in ${guild.name}`);
|
console.log(`[Verify] Assigned verified role to ${member.user.tag} in ${guild.name}`);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|
@ -456,7 +456,7 @@ function createWebServer(discordClient, supabase, options = {}) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Verification success endpoint - called by aethex.dev when verification completes
|
// Verification success endpoint - called by aethex.bot when verification completes
|
||||||
app.post('/api/verify-success', async (req, res) => {
|
app.post('/api/verify-success', async (req, res) => {
|
||||||
if (!supabase) {
|
if (!supabase) {
|
||||||
return res.status(503).json({ error: 'Database not available' });
|
return res.status(503).json({ error: 'Database not available' });
|
||||||
|
|
@ -513,7 +513,7 @@ function createWebServer(discordClient, supabase, options = {}) {
|
||||||
if (!role) continue;
|
if (!role) continue;
|
||||||
|
|
||||||
if (!member.roles.cache.has(role.id)) {
|
if (!member.roles.cache.has(role.id)) {
|
||||||
await member.roles.add(role, 'Account verified via aethex.dev');
|
await member.roles.add(role, 'Account verified via aethex.bot');
|
||||||
rolesAssigned++;
|
rolesAssigned++;
|
||||||
assignedIn.push(guild.name);
|
assignedIn.push(guild.name);
|
||||||
console.log(`[Verify-Success] Assigned verified role to ${member.user.tag} in ${guild.name}`);
|
console.log(`[Verify-Success] Assigned verified role to ${member.user.tag} in ${guild.name}`);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue