Skip to content

Commit

Permalink
added invite settings command
Browse files Browse the repository at this point in the history
  • Loading branch information
Blackstonecoden committed Dec 16, 2024
1 parent fa7699b commit f5dbdb5
Show file tree
Hide file tree
Showing 7 changed files with 138 additions and 10 deletions.
65 changes: 65 additions & 0 deletions cogs/commands/settings_commands.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import discord
from discord.ext import commands
from discord import app_commands
import json

from database.models import GlobalChannel
from languages import Translator
translator = Translator()

with open("config.json", 'r', encoding='utf-8') as file:
config = json.load(file)


class settings_commands(commands.Cog):
def __init__(self, client: commands.Bot):
self.client = client

channel_command = app_commands.Group(name=discord.app_commands.locale_str("settings"), description=discord.app_commands.locale_str("settings_description"), default_permissions=discord.Permissions(administrator=True), guild_only=True)

@channel_command.command(name=discord.app_commands.locale_str("invite"), description=discord.app_commands.locale_str("settings_invite_description"))
@app_commands.checks.cooldown(1, 300, key=lambda i: i.user.id)
@app_commands.describe(status=discord.app_commands.locale_str("settings_invite_describe_status"))
@app_commands.rename(status=discord.app_commands.locale_str("status"))
@app_commands.choices(status=[app_commands.Choice(name=discord.app_commands.locale_str("choice_settings_invite_on"), value=1),
app_commands.Choice(name=discord.app_commands.locale_str("choice_settings_invite_off"), value=0)])
async def setting_invite(self, interaction: discord.Interaction, status: app_commands.Choice[int]):
global_channel = await GlobalChannel(guild_id=interaction.guild.id).load()
if global_channel.stored == False:
error_embed = discord.Embed(
title=f"{config["emojis"]["x_circle_red"]} "+translator.translate(interaction.locale.value, "command.settings.invite.channel_error_embed.title"),
description=translator.translate(interaction.locale.value, "command.settings.invite.channe_error_embed.description"),
color=0xED4245)
await interaction.response.send_message(embed=error_embed, ephemeral=True)
else:
if status.value == global_channel.setting_invite:
if status.value == 0:
error_embed = discord.Embed(
title=f"{config["emojis"]["x_circle_red"]} "+translator.translate(interaction.locale.value, "command.settings.invite.same_false_error_embed.title"),
description=translator.translate(interaction.locale.value, "command.settings.invite.same_false_embed.description"),
color=0xED4245)
await interaction.response.send_message(embed=error_embed, ephemeral=True)
else:
error_embed = discord.Embed(
title=f"{config["emojis"]["x_circle_red"]} "+translator.translate(interaction.locale.value, "command.settings.invite.same_true_error_embed.title"),
description=translator.translate(interaction.locale.value, "command.settings.invite.same_true_embed.description"),
color=0xED4245)
await interaction.response.send_message(embed=error_embed, ephemeral=True)
else:
await global_channel.update(setting_invite=status.value)
if status.value == 1:
embed = discord.Embed(
title=f"{config["emojis"]["check_circle_green"]} "+translator.translate(interaction.locale.value, "command.settings.invite.enabled_embed.title"),
description=translator.translate(interaction.locale.value, "command.settings.invite.enabled_embed.description"),
color=0x57F287)
await interaction.response.send_message(embed=embed, ephemeral=True)
else:
embed = discord.Embed(
title=f"{config["emojis"]["check_circle_green"]} "+translator.translate(interaction.locale.value, "command.settings.invite.disabled_embed.title"),
description=translator.translate(interaction.locale.value, "command.settings.invite.disabled_embed.description"),
color=0x57F287)
await interaction.response.send_message(embed=embed, ephemeral=True)


async def setup(client:commands.Bot) -> None:
await client.add_cog(settings_commands(client))
15 changes: 12 additions & 3 deletions cogs/events/message.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,10 @@ async def loop_channels(self, message: discord.Message, global_channel: GlobalCh
role = "default"

channel: discord.TextChannel = self.client.get_channel(message.channel.id)
sent_message = await self.send(channel, message.author, role, global_channel.invite, message.guild, message.content, referenced_messages)
if global_channel.setting_invite == 0:
sent_message = await self.send(channel, message.author, role, None, message.guild, message.content, referenced_messages)
else:
sent_message = await self.send(channel, message.author, role, global_channel.invite, message.guild, message.content, referenced_messages)
messages = await GlobalMessage().add(uuid, sent_message.id, sent_message.channel.id)
await messages.add_info(uuid, sent_message.id, sent_message.channel.id, message.author.id)

Expand All @@ -137,7 +140,10 @@ async def loop_channels(self, message: discord.Message, global_channel: GlobalCh
try:
perms: discord.Permissions = channel.permissions_for(channel.guild.get_member(self.client.user.id))
if perms.send_messages:
sent_message = await self.send(channel, message.author, role, global_channel.invite, message.guild, message.content, referenced_messages)
if global_channel.setting_invite == 0:
sent_message = await self.send(channel, message.author, role, None, message.guild, message.content, referenced_messages)
else:
sent_message = await self.send(channel, message.author, role, global_channel.invite, message.guild, message.content, referenced_messages)
await messages.add(uuid, sent_message.id, sent_message.channel.id)
await asyncio.sleep(0.05)
except:
Expand All @@ -157,7 +163,10 @@ async def send(self, channel: discord.TextChannel, author: discord.Member, role:
embed.set_thumbnail(url=author.avatar.with_size(256).url)
else:
embed.set_thumbnail(url=author.default_avatar.with_size(256).url)
embed.add_field(name=translator.translate(channel.guild.preferred_locale.value, "global_chat.message.embed.field.name"),value=translator.translate(channel.guild.preferred_locale.value, "global_chat.message.embed.field.value", support_server=config["support_server_url"], invite=invite))
if invite:
embed.add_field(name=translator.translate(channel.guild.preferred_locale.value, "global_chat.message.embed.field.name"),value=translator.translate(channel.guild.preferred_locale.value, "global_chat.message.embed.field.value.invite", support_server=config["support_server_url"], invite=invite))
else:
embed.add_field(name=translator.translate(channel.guild.preferred_locale.value, "global_chat.message.embed.field.name"),value=translator.translate(channel.guild.preferred_locale.value, "global_chat.message.embed.field.value", support_server=config["support_server_url"]))
if guild.icon:
embed.set_footer(text=f"{guild.name}", icon_url=guild.icon.with_size(64).url)
else:
Expand Down
15 changes: 13 additions & 2 deletions database/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,9 @@
mutes = "mutes"

class GlobalChannel:
def __init__(self, channel_id: int = None, guild_id: int = None, invite: str = None):
def __init__(self, channel_id: int = None, guild_id: int = None):
self.channel_id = channel_id
self.guild_id = guild_id
self.invite = invite
self.stored = False

async def load(self):
Expand All @@ -27,6 +26,7 @@ async def load(self):
self.channel_id = result[0]
self.guild_id = result[1]
self.invite = result[2]
self.setting_invite = result[3]
self.stored = True
else:
self.stored = False
Expand All @@ -53,6 +53,17 @@ async def remove(self):
pool.close()
await pool.wait_closed()
return self

async def update(self, setting_invite: int = None):
if setting_invite is not None:
self.setting_invite = setting_invite
pool: Pool = await get_pool()
async with pool.acquire() as connection:
async with connection.cursor() as cursor:
await cursor.execute(f"UPDATE `{global_channels}` SET `setting_invite` = %s WHERE `guild_id` = %s", (self.setting_invite, self.guild_id,))
pool.close()
await pool.wait_closed()
return self

async def get_all_channels(self) -> dict:
pool: Pool = await get_pool()
Expand Down
1 change: 1 addition & 0 deletions database/structure.sql
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ CREATE TABLE IF NOT EXISTS `global_channels` (
`channel_id` BIGINT NOT NULL,
`guild_id` BIGINT NOT NULL,
`invite` VARCHAR(255) NOT NULL,
`setting_invite` BOOLEAN NOT NULL DEFAULT 1,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`channel_id`)
);
Expand Down
22 changes: 20 additions & 2 deletions languages/commands.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
"add": "add",
"stats": "stats",
"display_role": "display_role",
"settings": "settings",
"invite": "invite",
"status": "status",

"delete_message": "Delete Message",
"report_message": "Report Message",
Expand All @@ -34,6 +37,8 @@
"mute_add_description": "Mute a specific user",
"mute_remove_description": "Unmute a specific user",
"stats_description": "Displays statistics about the app",
"settings_description": "Change Global Chat settings",
"settings_invite_description": "Change the invite settings",


"channel_set_describe_channel": "The channel you want to set as a global chat",
Expand All @@ -45,6 +50,7 @@
"mute_add_describe_reason": "The reason for the mute",
"mute_remove_describe_user": "The user whose mute you want to remove",
"user_set_describe_display_role": "The role that will be displayed in the Global Chat",
"settings_invite_describe_status": "The invitation status",


"choice_mute_add_15m": "15 minutes",
Expand All @@ -53,7 +59,10 @@
"choice_mute_add_12h": "12 hours",
"choice_mute_add_1d": "1 day",
"choice_mute_add_7d": "7 days",
"choice_mute_add_permanent": "Permanent"
"choice_mute_add_permanent": "Permanent",

"choice_settings_invite_on": "On",
"choice_settings_invite_off": "Off"
},
"de": {
"help": "hilfe",
Expand All @@ -71,6 +80,9 @@
"reason": "grund",
"stats": "statistiken",
"display_role": "anzeige_rolle",
"settings": "einstellungen",
"invite": "einladung",
"status": "status",

"delete_message": "Nachricht Löschen",
"report_message": "Nachricht Melden",
Expand All @@ -90,6 +102,8 @@
"mute_add_description": "Schalte einen bestimmten Nutzer stumm",
"mute_remove_description": "Hebe die Stummschaltung eines bestimmten Nutzers auf",
"stats_description": "Zeigt dir Statistiken über die App",
"settings_description": "Ändere Einstellungen am Global Chat",
"settings_invite_description": "Ändere die Einladungseinstellungen",


"channel_set_describe_channel": "Der Kanal, den du als globalen Chat festlegen möchtest",
Expand All @@ -101,6 +115,7 @@
"mute_add_describe_reason": "Der Grund für die Stummschaltung",
"mute_remove_describe_user": "Den Nutzer, dessen Stummschaltung du aufheben möchtest",
"user_set_describe_display_role": "Die Rolle, die im Global Chat angezeigt wird",
"settings_invite_describe_status": "Der Einladungsstatus",


"choice_mute_add_15m": "15 Minuten",
Expand All @@ -109,6 +124,9 @@
"choice_mute_add_12h": "12 Stunden",
"choice_mute_add_1d": "1 Tag",
"choice_mute_add_7d": "7 Tage",
"choice_mute_add_permanent": "Permanent"
"choice_mute_add_permanent": "Permanent",

"choice_settings_invite_on": "An",
"choice_settings_invite_off": "Aus"
}
}
14 changes: 13 additions & 1 deletion languages/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@
"global_chat.link_error_embed.title": "FEHLER",
"global_chat.link_error_embed.description": "> **Links sind nicht erlaubt**\n> Deine Nachricht konnte nicht im Global Chat gesendet werden, da sie einen Link enthält. Das ist eine Sicherheitsmaßnahme, um Spam zu vermeiden. Wenn du denkst, dass dies ein Fehler ist, wende dich bitte an die Administratoren dieser App.",
"global_chat.message.embed.field.name": "Links",
"global_chat.message.embed.field.value": "[Support Server]($support_server) • [Server Einladung]($invite)",
"global_chat.message.embed.field.value.invite": "[Support Server]($support_server) • [Server Einladung]($invite)",
"global_chat.message.embed.field.value": "[Support Server]($support_server)",

"command.help.embed.title": "HILFE",
"command.help.embed.description": "> **Was ist die Global Chat App?**\n> Die Global Chat App ist eine Open-Source-Discord-App, die dir erlaubt, dich mit anderen Servern zu vernetzen und Nachrichten serverübergreifend zu versenden.\n\n> **Source Code**\n> Wenn du deine eigene Global Chat App erstellen möchtest, kannst du dir gerne den Code vom offiziellen [GitHub Repository](https://github.com/Blackstonecoden/global-chat) herunterladen.\n\n> **Fehler melden**\n> Wenn du einen Fehler in unserer App melden möchtest, tritt gerne unserem Support-Server bei.",
Expand Down Expand Up @@ -72,6 +73,17 @@
"command.stats.embed.title": "STATISTIKEN",
"command.stats.embed.description": "> **Datenbank**\n> Globale Nachrichten: `$global_messages_count`\n> Globale Kanäle: `$global_channels_count`\n> Benutzer: `$user_count`\n\n> **App**\n> Server: `$guilds`\n> Nutzer: `$users`\n> Gestartet: <t:$start_time:R>\n> Ping: `$ping`",

"command.settings.invite.channel_error_embed.title": "FEHLER",
"command.settings.invite.channel_error_embed.description": "> **Kein Global Chat vorhanden**\n> Dein Server hat keinen Global Chat. Wenn du die Einstellungen deines Global Chats ändern möchtest, füge zuerst einen Global Chat hinzu. Wenn du denkst, dass dies ein Fehler ist, wende dich bitte an die Administratoren dieser App.",
"command.settings.invite.same_false_error_embed.title": "FEHLER",
"command.settings.invite.same_false_embed.description": "> **Einstellungen gleich**\n> Die Global Chat Einladungen sind bereits deaktiviert. Wenn du denkst, dass dies ein Fehler ist, wende dich bitte an die Administratoren dieser App.",
"command.settings.invite.same_true_error_embed.title": "FEHLER",
"command.settings.invite.same_true_embed.description": "> **Einstellungen gleich**\n> Die Global Chat Einladungen sind bereits aktiviert. Wenn du denkst, dass dies ein Fehler ist, wende dich bitte an die Administratoren dieser App.",
"command.settings.invite.enabled_embed.title": "EINSTELLUNGEN AKTUALISIERT",
"command.settings.invite.enabled_embed.description": "> **Einladungen aktiviert**\n> Die Global Chat Einladungen wurden erfolgreich aktiviert. Nutzer von anderen Servern können nun deinem Server über dem Global Chat beitreten.",
"command.settings.invite.disabled_embed.title": "EINSTELLUNGEN AKTUALISIERT",
"command.settings.invite.disabled_embed.description": "> **Einladungen deaktiviert**\n> Die Global Chat-Einladungen wurden erfolgreich deaktiviert. Nutzer von anderen Servern können deinem Server über den Global Chat nicht mehr beitreten.",

"menu.delete_message.success_embed.title": "NACHRICHT GELÖSCHT",
"menu.delete_message.success_embed.description": "> **Nachricht erfolgreich gelöscht**\n> Die ausgewählte Nachricht wurde erfolgreich aus dem Global Chat gelöscht.\n\n> **Informationen**\n> Instanzen gelöscht: `$count`\n> Zeit: `$duration`",
"menu.delete_message.database_error_embed.title": "FEHLER",
Expand Down
Loading

0 comments on commit f5dbdb5

Please sign in to comment.