diff --git a/.github/scripts/compare-languages.js b/.github/scripts/compare-languages.js new file mode 100644 index 0000000..fcb1f4c --- /dev/null +++ b/.github/scripts/compare-languages.js @@ -0,0 +1,74 @@ +const fs = require('fs'); +const path = require('path'); + +function readJson(filePath) { + const rawData = fs.readFileSync(filePath, 'utf8'); + return JSON.parse(rawData); +} + +function getAllJsonFiles(directory) { + let jsonFiles = []; + const files = fs.readdirSync(directory); + + files.forEach(file => { + const fullPath = path.join(directory, file); + if (fs.statSync(fullPath).isDirectory()) { + jsonFiles = jsonFiles.concat(getAllJsonFiles(fullPath)); + } else if (file.endsWith('.json')) { + jsonFiles.push(fullPath); + } + }); + + return jsonFiles; +} + +function compareJsonFiles(enUsDir, otherLangDir) { + const enUsFiles = getAllJsonFiles(enUsDir); + const otherLangFiles = getAllJsonFiles(otherLangDir); + + const enUsFilesRelative = enUsFiles.map(file => path.relative(enUsDir, file)); + const otherLangFilesRelative = otherLangFiles.map(file => path.relative(otherLangDir, file)); + + const missingFiles = enUsFilesRelative.filter(file => !otherLangFilesRelative.includes(file)); + + const missingKeys = {}; + + enUsFilesRelative.forEach(file => { + if (otherLangFilesRelative.includes(file)) { + const enUsJson = readJson(path.join(enUsDir, file)); + const otherLangJson = readJson(path.join(otherLangDir, file)); + + const missingKeysInFile = Object.keys(enUsJson).filter(key => !otherLangJson.hasOwnProperty(key)); + if (missingKeysInFile.length > 0) { + missingKeys[file] = missingKeysInFile; + } + } + }); + + return { missingFiles, missingKeys }; +} + +function compareAllLanguages(baseDir) { + const enUsDir = path.join(baseDir, 'en_us'); + const languages = fs.readdirSync(baseDir).filter(dir => fs.statSync(path.join(baseDir, dir)).isDirectory() && dir !== 'en_us'); + + const report = {}; + + languages.forEach(lang => { + const langDir = path.join(baseDir, lang); + const { missingFiles, missingKeys } = compareJsonFiles(enUsDir, langDir); + report[lang] = { missingFiles, missingKeys }; + }); + + return report; +} + +const baseDirectory = './bot/'; +const comparisonReport = compareAllLanguages(baseDirectory); + +for (const [lang, report] of Object.entries(comparisonReport)) { + console.log(`Language: ${lang}`); + console.log(` Missing files: ${report.missingFiles.length > 0 ? report.missingFiles.join(', ') : 'None'}`); + console.log(` Missing keys: ${Object.keys(report.missingKeys).length > 0 ? JSON.stringify(report.missingKeys, null, 2) : 'None'}`); + console.log(); +} diff --git a/.github/scripts/validate-slash_commands.js b/.github/scripts/validate-slash_commands.js index 37fa0ca..34c8cc1 100644 --- a/.github/scripts/validate-slash_commands.js +++ b/.github/scripts/validate-slash_commands.js @@ -6,6 +6,8 @@ const conversionFile = './bot/languages.json'; let foundErrors = false; +const nonChatInputCommands = ["initialReactor.json"]; + try { const conversionData = fs.readFileSync(conversionFile, 'utf8'); const languageMap = JSON.parse(conversionData); @@ -41,35 +43,36 @@ try { const currentPath = path ? `${path}.${key}` : key; if (typeof value === 'string') { + if (currentPath.endsWith('.description') && value.length > 100) { console.error(`Validation error: ${directory}/${file}: Description exceeds 100 characters at '${currentPath}'`); foundErrors = true; } - if (currentPath.endsWith('.name') && value.includes(' ')) { - console.error(`Validation error: ${directory}/${file}: Name contains space at '${currentPath}'`); + if (currentPath.endsWith('.name') && value.match(/^[-_\p{L}\p{N}\p{sc=Deva}\p{sc=Thai}]{1,32}$/gu) == null) { + console.error(`Validation error: ${directory}/${file}: Name does not match regex at '${currentPath}', VALUE: ${value}`); foundErrors = true; } if (value !== value.toLowerCase() && currentPath.endsWith('name')) { console.error(`Validation error: ${directory}/${file}: Key '${currentPath}' must be lowercase`); foundErrors = true; } - + } else if (typeof value === 'object' && value !== null) { checkFields(value, currentPath); } }); } + if (!nonChatInputCommands.includes(file)) { + checkFields(jsonData); - checkFields(jsonData); - - if (jsonData.name && jsonData.name.includes(' ')) { - console.error(`Validation error: ${directory}/${file}: Name contains space at 'name'`); - foundErrors = true; - } else if (jsonData.description && jsonData.description.length > 100) { - console.error(`Validation error: ${directory}/${file}: Description exceeds 100 characters at 'description'`); - foundErrors = true; + if (jsonData.name && jsonData.name.match(/^[-_\p{L}\p{N}\p{sc=Deva}\p{sc=Thai}]{1,32}$/gu) == null) { + console.error(`Validation error: ${directory}/${file}: Name does not match regex, VALUE: ${jsonData.name}`); + foundErrors = true; + } else if (jsonData.description && jsonData.description.length > 100) { + console.error(`Validation error: ${directory}/${file}: Description exceeds 100 characters at 'description'`); + foundErrors = true; + } } - } catch (err) { console.error(`Error processing ${file}:`, err); foundErrors = true; diff --git a/.github/workflows/language-comparison.yml b/.github/workflows/language-comparison.yml new file mode 100644 index 0000000..357b0fa --- /dev/null +++ b/.github/workflows/language-comparison.yml @@ -0,0 +1,13 @@ +name: Language comparison + +on: [workflow_dispatch] + +jobs: + compare-languages: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: Compare language files + run: node .github/scripts/compare-languages.js diff --git a/activate.js b/activate.js index 42b7890..381cd1b 100644 --- a/activate.js +++ b/activate.js @@ -3,74 +3,93 @@ const path = require('path'); const fallbackLanguage = "en_us"; const baseDirectory = "bot"; -const baseDirectoryActive = "active/bot"; const languages = require('./bot/languages.json'); +const languagesLocation = path.join(process.cwd(), "languages", baseDirectory); +const activeLanguagesLocation = path.join(process.cwd(), "languages", "active", baseDirectory); + +// relative file path is the path after the locale directory +function loadFile(locale, relativeFilePath) { + + const filePath = path.join(languagesLocation, locale, relativeFilePath); + + try { + let data; + if (!fs.existsSync(filePath)) + data = "{}"; + else + data = fs.readFileSync(filePath, 'utf8'); + const jsonData = JSON.parse(data); + const fallbackLanguageData = JSON.parse(fs.readFileSync(path.join(languagesLocation, fallbackLanguage, relativeFilePath), 'utf8')); + function checkFields(obj, path = '') { + Object.keys(obj).forEach(key => { + const value = obj[key]; + const currentPath = path ? `${path}.${key}` : key; + + if (typeof value === 'string') { + let pointer = fallbackLanguageData; + const structPath = currentPath.split("."); + for (let i = 0; i < structPath.length - 1; i++) { + pointer = pointer[structPath[i]]; + } + pointer[structPath[structPath.length - 1]] = value; + } else if (typeof value === 'object' && value !== null) { + checkFields(value, currentPath); + } + }); + } + + checkFields(jsonData); + + const absolutePathToActiveSubdirectory = path.join(activeLanguagesLocation, locale, relativeFilePath); + + if (!fs.existsSync(path.dirname(absolutePathToActiveSubdirectory))) + fs.mkdirSync(path.dirname(absolutePathToActiveSubdirectory), { recursive: true }); + + fs.writeFileSync(absolutePathToActiveSubdirectory, JSON.stringify(fallbackLanguageData), { recursive: true }); + + } catch (err) { + console.error(`Error processing ${filePath}:`, err); + foundErrors = true; + } + +} + +function loadSubdirectory(locale, relativePath) { + const absolutePath = path.join(languagesLocation, fallbackLanguage, relativePath); + const subdirectories = fs.readdirSync(absolutePath, { withFileTypes: true }) + .filter(dirent => dirent.isDirectory()) + .map(dirent => dirent.name); + const subfiles = fs.readdirSync(absolutePath, { withFileTypes: true }) + .filter(dirent => !dirent.isDirectory()) + .map(dirent => dirent.name); + for (let i = 0; i < subdirectories.length; i++) { + const subdirectoryPath = path.join(relativePath, subdirectories[i]); + loadSubdirectory(locale, subdirectoryPath); + } + for (let i = 0; i < subfiles.length; i++) { + const filePath = path.join(relativePath, subfiles[i]); + loadFile(locale, filePath); + } +} + function activate() { Object.entries(languages).forEach(([key, value]) => { - const directory = path.join(process.cwd(), "languages", baseDirectory, value, "standard"); - + const directory = path.join(process.cwd(), "languages", baseDirectory, value); + console.log(`Processing language code ${key}...`); if (!fs.existsSync(directory)) { console.log(`Skipping non-existent directory: ${directory} for language code ${key}`); return; } - const files = fs.readdirSync(directory); - if (files.length === 0) { - console.log(`No JSON files found in ${directory}.`); - return; - } - - const activeLanguageBotStandardDirectory = path.join(process.cwd(), "languages", baseDirectoryActive, value, "standard"); - - if (!fs.existsSync(activeLanguageBotStandardDirectory)) - fs.mkdirSync(activeLanguageBotStandardDirectory, { recursive: true }); - - files.forEach(file => { - if (!file.endsWith('.json')) { - console.log(`Skipping non-JSON file: ${file}`); - return; - } - - console.log(`Copying ${value}/${file}...`); - const filePath = path.join(directory, file); - try { - const data = fs.readFileSync(filePath, 'utf8'); - const jsonData = JSON.parse(data); - const fallbackLanguageData = require(`./${baseDirectory}/${fallbackLanguage}/standard/${file}`); - function checkFields(obj, path = '') { - Object.keys(obj).forEach(key => { - const value = obj[key]; - const currentPath = path ? `${path}.${key}` : key; - - if (typeof value === 'string') { - let pointer = fallbackLanguageData; - const structPath = currentPath.split("."); - for (let i = 0; i < structPath.length - 1; i++) { - pointer = pointer[structPath[i]]; - } - pointer[structPath[structPath.length - 1]] = value; - } else if (typeof value === 'object' && value !== null) { - checkFields(value, currentPath); - } - }); - } - - checkFields(jsonData); - - if (!fs.existsSync(activeLanguageBotStandardDirectory)) - fs.mkdirSync(activeLanguageBotStandardDirectory, { recursive: true }); - - fs.writeFileSync(path.join(activeLanguageBotStandardDirectory, file), JSON.stringify(fallbackLanguageData)); + if (!fs.existsSync(activeLanguagesLocation)) + fs.mkdirSync(activeLanguagesLocation, { recursive: true }); - } catch (err) { - console.error(`Error processing ${file}:`, err); - foundErrors = true; - } - }); + console.log(`Copying ${directory}...`); + loadSubdirectory(value, "/"); }); } -module.exports = activate; +module.exports = activate; \ No newline at end of file diff --git a/bot/en_gb/access_token.json b/bot/en_gb/access_token.json new file mode 100644 index 0000000..721f000 --- /dev/null +++ b/bot/en_gb/access_token.json @@ -0,0 +1,4 @@ +{ + "1": "Admin", + "2": "Basic" +} \ No newline at end of file diff --git a/bot/en_gb/channel_update_types.json b/bot/en_gb/channel_update_types.json new file mode 100644 index 0000000..720ce9b --- /dev/null +++ b/bot/en_gb/channel_update_types.json @@ -0,0 +1,3 @@ +{ + "none": "none" +} \ No newline at end of file diff --git a/bot/en_gb/command_responses.json b/bot/en_gb/command_responses.json index d232e4a..701a5f0 100644 --- a/bot/en_gb/command_responses.json +++ b/bot/en_gb/command_responses.json @@ -50,10 +50,10 @@ "response-unban": "Unbanned", "response-purge": "Purged {count} messages", - "response-customise-dash": "Customisation settings have moved to our [web dashboard]!", - "response-customise-1": "Log messages up to 2 weeks old, customise logs, and so much more with Quark Pro...", + "response-customise-dash": "Customisation settings have moved to Quark's [web dashboard]!", + "response-customise-1": "Log messages up to 8 weeks old, customise logs, and so much more with Quark Pro...", "response-customise-2": "[UK, US, EU] Click onto my profile to upgrade!", - "response-customise-3": "Or... {proLink}", + "response-customise-3": "See subscriptions... {proLink}", "response-customise-4": "Try out colour customisation for free at {inventoryLink}", "response-case-updated": "Case updated!", @@ -104,11 +104,17 @@ "setserverlog-type-channels-1": "channel events", "setserverlog-type-modlogs-0": "Modlogs", "setserverlog-type-modlogs-1": "modlogs", + "setserverlog-type-quark-0": "Quark Events", + "setserverlog-type-quark-1": "quark events", "setserverlog-spoilers": "Spoilers", "setserverlog-spoilers-0": "Serverlog spoilers set to {result}", "setserverlog-enable-status-updates": "Enable Status Updates!", "setserverlog-enable-status-updates-desc": "Get notified of all the latest updates, downtime, and other important communications from the developers!", "setserverlog-enable-status-updates-desc-1": "We highly recommend you enable this in one of your channels!", + "setserverlog-check-permissions": "Please ensure Quark has permission to send messages in this channel, or the channel will be unset.", + + "festive-title": "Free Festive Gift!", + "festive-claim": "Claim your free gift!", "help-overview-website-description": "Easily set up and manage Quark from the [web dashboard]!", "help-overview-inventory-description": "Manage your subscriptions or get some [Quark Pro] features for free!", @@ -154,6 +160,9 @@ "need-to-vote": "Click here to vote", "need-to-vote-footer": "Votes take up to a minute to be registered", + "initialreactors-expired": "expired", + "initialreactors-notfound": "No reactions found", + "configCommand": { "title": "Serverlog Configuration", "selection": "Select a category in the menu to view configuration.", @@ -202,6 +211,10 @@ "title": "Overview", "description": "Overview of main category options" }, + "quarkEvents": { + "title": "Quark Config", + "description": "Changes made to Quark's configuration for this server" + }, "fileEvents": { "title": "Files" } diff --git a/bot/en_gb/emoji_update_types.json b/bot/en_gb/emoji_update_types.json new file mode 100644 index 0000000..720ce9b --- /dev/null +++ b/bot/en_gb/emoji_update_types.json @@ -0,0 +1,3 @@ +{ + "none": "none" +} \ No newline at end of file diff --git a/bot/en_gb/gui_constants.json b/bot/en_gb/gui_constants.json index 747102d..993c5e2 100644 --- a/bot/en_gb/gui_constants.json +++ b/bot/en_gb/gui_constants.json @@ -33,5 +33,9 @@ "explicit_content_filter": "Explicit Content Filter", "nsfw_level": "NSFW Level", "premium_progress_bar_enabled": "Progress Bar" + }, + "webhookModificationTypes": { + "name": "Name", + "channel_id": "Channel" } } \ No newline at end of file diff --git a/bot/en_gb/ignore_options.json b/bot/en_gb/ignore_options.json new file mode 100644 index 0000000..197476a --- /dev/null +++ b/bot/en_gb/ignore_options.json @@ -0,0 +1,12 @@ +{ + "ignoreTargets": "Ignore Target Users", + "ignoreExecutors": "Ignore Target Executors", + "specificMessageContent": "Ignore Specific Message Content", + "ignoreChannels": "Ignore Channels", + "ignoreBotExecutors": "Ignore Bot Executors", + "ignoreBotTargets": "Ignore Bot Targets", + "ignoreExecutorRoles": "Ignore Executor Roles", + "ignoreTargetRoles": "Ignore Target Roles", + "ignoreCategories": "Ignore Categories", + "activeIgnore": "Active Ignore" +} \ No newline at end of file diff --git a/bot/en_gb/log_categories.json b/bot/en_gb/log_categories.json new file mode 100644 index 0000000..3279228 --- /dev/null +++ b/bot/en_gb/log_categories.json @@ -0,0 +1,13 @@ +{ + "serverEvents": "Members", + "serverActions": "Actions", + "textEvents": "Messages", + "voiceEvents": "Voice", + "fileEvents": "Files", + "generalEvents": "Server", + "roleEvents": "Roles", + "channelEvents": "Channels", + "quarkEvents": "Quark Config", + "modLog": "Modlogs", + "main": "Main" +} \ No newline at end of file diff --git a/bot/en_gb/log_formats.json b/bot/en_gb/log_formats.json new file mode 100644 index 0000000..7531cd0 --- /dev/null +++ b/bot/en_gb/log_formats.json @@ -0,0 +1,7 @@ +{ + "0": "Standard", + "1": "Compact", + "2": "Standard (no embed)", + "3": "Compact (no embed)", + "4": "json" +} \ No newline at end of file diff --git a/bot/en_gb/slash_commands/dashboard.json b/bot/en_gb/slash_commands/dashboard.json new file mode 100644 index 0000000..36050cd --- /dev/null +++ b/bot/en_gb/slash_commands/dashboard.json @@ -0,0 +1,4 @@ +{ + "name": "dashboard", + "description": "Visit Quark's web dashboard" +} \ No newline at end of file diff --git a/bot/en_gb/slash_commands/initialReactor.json b/bot/en_gb/slash_commands/initialReactor.json new file mode 100644 index 0000000..61bbbbb --- /dev/null +++ b/bot/en_gb/slash_commands/initialReactor.json @@ -0,0 +1,3 @@ +{ + "name": "See initial reactors" +} \ No newline at end of file diff --git a/bot/en_gb/slash_commands/premium.json b/bot/en_gb/slash_commands/premium.json new file mode 100644 index 0000000..5ab0d12 --- /dev/null +++ b/bot/en_gb/slash_commands/premium.json @@ -0,0 +1,4 @@ +{ + "name": "premium", + "description": "Get information about the premium subscriptions Quark has" +} \ No newline at end of file diff --git a/bot/en_gb/standard/channelEvents.json b/bot/en_gb/standard/channelEvents.json index b3b20ae..3ac3e9c 100644 --- a/bot/en_gb/standard/channelEvents.json +++ b/bot/en_gb/standard/channelEvents.json @@ -1,30 +1,62 @@ { "channelCreated": { - "title": "Channel Created", + "title": "{type} Channel Created", "description": "{channel} was created by {executor}", "descriptionWithCategory": "{channel} was created by {executor} under the {category} category." }, "channelDeleted": { - "title": "Channel Deleted", + "title": "{type} Channel Deleted", "description": "{channel_name} was deleted by {executor}", "channel": "Channel" }, "channelUpdated": { - "title": "Channel Modified", + "title": "{type} Channel Modified", "description": "{channel} was modified by {executor}" }, "channelOverwriteCreate": { - "title": "Channel Permissions Added", + "title": "{type} Channel Permissions Added", "description": "{executor} added permissions to {channel} for {special}" }, "channelOverwriteDelete": { - "title": "Channel Permissions Removed", + "title": "{type} Channel Permissions Removed", "description": "{executor} removed permissions from {channel} for {special}" }, "channelOverwriteUpdate": { - "title": "Channel Permissions Updated", + "title": "{type} Channel Permissions Updated", "description": "{executor} updated permissions for {channel} for {special}", "newPermissions": "New Permissions", "viewFullNewPermissions": "View Full New Permissions" + }, + "webhookCreate": { + "title": "Webhook Created", + "description": "{executor} created a webhook {webhook} in {channel}" + }, + "webhookDelete": { + "title": "Webhook Deleted", + "description": "{executor} deleted the webhook {webhook}" + }, + "webhookUpdate": { + "title": "Webhook Modified", + "description": "{executor} modified the webhook {webhook}" + }, + "webhookAvatarUpdate": { + "title": "Webhook Avatar Updated", + "description": "{executor} updated the avatar for {webhook}", + "description_added": "{executor} added an avatar for {webhook}", + "description_removed": "{executor} removed the avatar for {webhook}", + "linkToOldAvatar": "Link to old avatar", + "linkToNewAvatar": "Link to new avatar" + }, + "statusChannelFollowed": { + "title": "Channel Followed", + "description": "{executor} followed the channel {name} in {channel}" + }, + "statusChannelUnfollowed": { + "title": "Channel Unfollowed", + "description": "{executor} unfollowed the channel {name}" + }, + "statusChannelUpdated": { + "title": "Followed Channel Updated", + "description": "{executor} updated the followed channel {name}" } } \ No newline at end of file diff --git a/bot/en_gb/standard/quarkEvents.json b/bot/en_gb/standard/quarkEvents.json new file mode 100644 index 0000000..32cd39d --- /dev/null +++ b/bot/en_gb/standard/quarkEvents.json @@ -0,0 +1,64 @@ +{ + "serverlogChannelUpdate": { + "title": "Logging Channel Changed", + "description_set": "{executor} set the {type} logging channel to {channel}", + "description_category_disable": "{executor} disabled the {type} logging channel", + "description_unset": "{executor} unset the {type} logging channel" + }, + "serverlogOptionsUpdate": { + "title": "Logging Options Updated", + "description": "{executor} set {option} to {state}", + "pluralkitSupport": "PluralKit Support", + "spoilers": "Spoilers", + "buttons": "Buttons", + "formatType": "Format Type" + }, + "serverlogLogUpdate": { + "title": "Log Updated", + "description": "{executor} updated the {type} log", + "enabled": "Enabled", + "logFormat": "Format", + "logChannel": "Channel", + "colour": "Colour", + "ignoreBotExecutors": "Ignore Bot Executors", + "ignoreBotTargets": "Ignore Bot Targets", + "activeIgnore": "Active Ignore" + }, + "serverlogIgnoreUpdate": { + "title": "Ignore Options Updated", + "description_set": "{executor} enabled {type}", + "description_unset": "{executor} disabled {type}", + "description_added": "{executor} added {target} to {type}", + "description_removed": "{executor} removed {target} from {type}" + }, + "languageUpdate": { + "title": "Language Changed", + "description": "{executor} changed the language to {language}" + }, + "reset": { + "title": "Configuration Reset", + "description": "{executor} reset the configuration for this server" + }, + "tagAdded": { + "title": "Tag Added", + "description": "{executor} created a tag {tag}" + }, + "tagUpdated": { + "title": "Tag Updated", + "description": "{executor} updated the tag {tag}" + }, + "tagDeleted": { + "title": "Tag Deleted", + "description": "{executor} deleted the tag {tag}" + }, + "tokenAdded": { + "title": "Token Generated", + "description": "{executor} generated a Quark access token with {permissions} permissions for this server", + "unique_id": "Token ID", + "revoke": "Revoke this token" + }, + "tokenRevoked": { + "title": "Token Revoked", + "description": "{executor} revoked the Quark access token with ID {token}" + } +} \ No newline at end of file diff --git a/bot/en_gb/standard/serverActions.json b/bot/en_gb/standard/serverActions.json index 46a6c86..334be6d 100644 --- a/bot/en_gb/standard/serverActions.json +++ b/bot/en_gb/standard/serverActions.json @@ -5,7 +5,8 @@ "description_withoutInviter": "An invite {invite} was created for {channel}", "expires": "Expires", "never": "Never", - "maxUses": "Max Uses" + "maxUses": "Max Uses", + "none": "none" }, "inviteDelete": { "title": "Invite Deleted", @@ -27,5 +28,26 @@ "emojiUpdated": { "title": "Emoji Edited", "description": "{emoji} was edited by {executor}" + }, + "serverEventCreate": { + "title": "Event Created", + "description_withChannel": "{executor} created an event {name} in {channel}", + "description_withoutChannel": "{executor} created an event {name}", + "eventDescription": "Description", + "location": "Location", + "starts": "Starts" + }, + "serverEventDelete": { + "title": "Event Deleted", + "description": "{executor} deleted the event {name}", + "linkToEventImage": "Link to event image" + }, + "serverEventUpdate": { + "title": "Event Updated", + "description": "{executor} updated the event {name}", + "newEventDescription": "New Description", + "newLocation": "New Location", + "newChannel": "New Channel", + "linkToEventImage": "Link to old event image" } } \ No newline at end of file diff --git a/bot/en_gb/standard/textEvents.json b/bot/en_gb/standard/textEvents.json index df695f2..5037d39 100644 --- a/bot/en_gb/standard/textEvents.json +++ b/bot/en_gb/standard/textEvents.json @@ -31,7 +31,8 @@ "sticker": "sticker", "noContent": "no content", "embed": "embed", - "thread": "Thread" + "thread": "Thread", + "initialReactor": "initial reactor" }, "messagesBulkDeleted": { "title": "Multiple Messages Deleted", diff --git a/bot/en_gb/standard/voiceEvents.json b/bot/en_gb/standard/voiceEvents.json index 796433b..f401b34 100644 --- a/bot/en_gb/standard/voiceEvents.json +++ b/bot/en_gb/standard/voiceEvents.json @@ -30,7 +30,9 @@ }, "voiceLeave": { "title": "Left Channel", - "description": "{user} left the {channel} voice channel" + "description": "{user} left the {channel} voice channel", + "joined": "Joined", + "joinedValue": "{relative} for {relative_fixed}" }, "voiceDisconnect": { "title": "Disconnected", @@ -67,5 +69,36 @@ "description": "{executor} set the status for {channel}", "status": "Status", "linksToEmojis": "Links to emojis" + }, + "stageStarted": { + "title": "Stage Started", + "description": "{executor} started a stage in {channel}", + "topic": "Topic" + }, + "stageEnded": { + "title": "Stage Ended", + "description": "The stage in {channel} was ended by {executor}", + "description_noExecutor": "The stage in {channel} was ended", + "topic": "Topic", + "none": "none" + }, + "stageUpdated": { + "title": "Stage Updated", + "description": "The stage in {channel} was updated by {executor}", + "oldTopic": "Old Topic", + "newTopic": "New Topic" + }, + "stageSpeakerAdd": { + "title": "New Stage Speaker", + "description": "{user} became a speaker in the {channel} stage channel", + "description_inviteAccepted": "{user} accepted the invite to become a speaker in the {channel} stage channel" + }, + "stageSpeakerRemove": { + "title": "Stopped Speaking", + "description": "{user} is no longer a speaker in the {channel} stage channel" + }, + "stageSpeakerInvited": { + "title": "Speaker Invited", + "description": "{user} was invited to speak in the {channel} stage channel" } } \ No newline at end of file diff --git a/bot/en_gb/time.json b/bot/en_gb/time.json new file mode 100644 index 0000000..ee6e28d --- /dev/null +++ b/bot/en_gb/time.json @@ -0,0 +1,16 @@ +{ + "second": "{time} second", + "second-plural": "{time} seconds", + "minute": "{time} minute", + "minute-plural": "{time} minutes", + "hour": "{time} hour", + "hour-plural": "{time} hours", + "day": "{time} day", + "day-plural": "{time} days", + "week": "{time} week", + "week-plural": "{time} weeks", + "month": "{time} month", + "month-plural": "{time} months", + "year": "{time} year", + "year-plural": "{time} years" +} \ No newline at end of file diff --git a/bot/en_pr/access_token.json b/bot/en_pr/access_token.json new file mode 100644 index 0000000..721f000 --- /dev/null +++ b/bot/en_pr/access_token.json @@ -0,0 +1,4 @@ +{ + "1": "Admin", + "2": "Basic" +} \ No newline at end of file diff --git a/bot/en_pr/channel_update_types.json b/bot/en_pr/channel_update_types.json new file mode 100644 index 0000000..720ce9b --- /dev/null +++ b/bot/en_pr/channel_update_types.json @@ -0,0 +1,3 @@ +{ + "none": "none" +} \ No newline at end of file diff --git a/bot/en_pr/command_responses.json b/bot/en_pr/command_responses.json index 205bd69..fe883da 100644 --- a/bot/en_pr/command_responses.json +++ b/bot/en_pr/command_responses.json @@ -50,10 +50,10 @@ "response-unban": "Unbanned", "response-purge": "Purged {count} messages", - "response-customise-dash": "Customisation settings have moved to our [web dashboard]!", + "response-customise-dash": "Customisation settings have moved to Quark's [web dashboard]!", "response-customise-1": "Log messages up to 2 weeks old, customise logs, and so much more with Quark Pro...", "response-customise-2": "[UK, US, EU] Click onto my profile to upgrade!", - "response-customise-3": "Or... {proLink}", + "response-customise-3": "See subscriptions... {proLink}", "response-customise-4": "Try out colour customisation for free at {inventoryLink}", "response-case-updated": "Case updated!", @@ -104,11 +104,17 @@ "setserverlog-type-channels-1": "channel events", "setserverlog-type-modlogs-0": "Modlogs", "setserverlog-type-modlogs-1": "modlogs", + "setserverlog-type-quark-0": "Quark Events", + "setserverlog-type-quark-1": "quark events", "setserverlog-spoilers": "Spoilers", "setserverlog-spoilers-0": "Serverlog spoilers set to {result}", "setserverlog-enable-status-updates": "Enable Status Updates!", "setserverlog-enable-status-updates-desc": "Get notified of all the latest updates, downtime, and other important communications from the developers!", "setserverlog-enable-status-updates-desc-1": "We highly recommend you enable this in one of your channels!", + "setserverlog-check-permissions": "Please ensure Quark has permission to send messages in this channel, or the channel will be unset.", + + "festive-title": "Free Festive Gift!", + "festive-claim": "Claim your free gift!", "help-overview-website-description": "Easily set up and manage Quark from the [web dashboard]!", "help-overview-inventory-description": "Manage your subscriptions or get some [Quark Pro] features for free!", @@ -154,6 +160,9 @@ "need-to-vote": "Click here to vote", "need-to-vote-footer": "Votes take up to a minute to be registered", + "initialreactors-expired": "expired", + "initialreactors-notfound": "No reactions found", + "configCommand": { "title": "Serverlog Configuration", "selection": "Select a category in the menu to view configuration.", @@ -202,6 +211,10 @@ "title": "Overview", "description": "Overview of main category options" }, + "quarkEvents": { + "title": "Quark Config", + "description": "Changes made to Quark's configuration for this server" + }, "fileEvents": { "title": "Files" } diff --git a/bot/en_pr/emoji_update_types.json b/bot/en_pr/emoji_update_types.json new file mode 100644 index 0000000..720ce9b --- /dev/null +++ b/bot/en_pr/emoji_update_types.json @@ -0,0 +1,3 @@ +{ + "none": "none" +} \ No newline at end of file diff --git a/bot/en_pr/ignore_options.json b/bot/en_pr/ignore_options.json new file mode 100644 index 0000000..197476a --- /dev/null +++ b/bot/en_pr/ignore_options.json @@ -0,0 +1,12 @@ +{ + "ignoreTargets": "Ignore Target Users", + "ignoreExecutors": "Ignore Target Executors", + "specificMessageContent": "Ignore Specific Message Content", + "ignoreChannels": "Ignore Channels", + "ignoreBotExecutors": "Ignore Bot Executors", + "ignoreBotTargets": "Ignore Bot Targets", + "ignoreExecutorRoles": "Ignore Executor Roles", + "ignoreTargetRoles": "Ignore Target Roles", + "ignoreCategories": "Ignore Categories", + "activeIgnore": "Active Ignore" +} \ No newline at end of file diff --git a/bot/en_pr/log_categories.json b/bot/en_pr/log_categories.json new file mode 100644 index 0000000..3279228 --- /dev/null +++ b/bot/en_pr/log_categories.json @@ -0,0 +1,13 @@ +{ + "serverEvents": "Members", + "serverActions": "Actions", + "textEvents": "Messages", + "voiceEvents": "Voice", + "fileEvents": "Files", + "generalEvents": "Server", + "roleEvents": "Roles", + "channelEvents": "Channels", + "quarkEvents": "Quark Config", + "modLog": "Modlogs", + "main": "Main" +} \ No newline at end of file diff --git a/bot/en_pr/log_formats.json b/bot/en_pr/log_formats.json new file mode 100644 index 0000000..7531cd0 --- /dev/null +++ b/bot/en_pr/log_formats.json @@ -0,0 +1,7 @@ +{ + "0": "Standard", + "1": "Compact", + "2": "Standard (no embed)", + "3": "Compact (no embed)", + "4": "json" +} \ No newline at end of file diff --git a/bot/en_pr/standard/channelEvents.json b/bot/en_pr/standard/channelEvents.json index b3b20ae..3ac3e9c 100644 --- a/bot/en_pr/standard/channelEvents.json +++ b/bot/en_pr/standard/channelEvents.json @@ -1,30 +1,62 @@ { "channelCreated": { - "title": "Channel Created", + "title": "{type} Channel Created", "description": "{channel} was created by {executor}", "descriptionWithCategory": "{channel} was created by {executor} under the {category} category." }, "channelDeleted": { - "title": "Channel Deleted", + "title": "{type} Channel Deleted", "description": "{channel_name} was deleted by {executor}", "channel": "Channel" }, "channelUpdated": { - "title": "Channel Modified", + "title": "{type} Channel Modified", "description": "{channel} was modified by {executor}" }, "channelOverwriteCreate": { - "title": "Channel Permissions Added", + "title": "{type} Channel Permissions Added", "description": "{executor} added permissions to {channel} for {special}" }, "channelOverwriteDelete": { - "title": "Channel Permissions Removed", + "title": "{type} Channel Permissions Removed", "description": "{executor} removed permissions from {channel} for {special}" }, "channelOverwriteUpdate": { - "title": "Channel Permissions Updated", + "title": "{type} Channel Permissions Updated", "description": "{executor} updated permissions for {channel} for {special}", "newPermissions": "New Permissions", "viewFullNewPermissions": "View Full New Permissions" + }, + "webhookCreate": { + "title": "Webhook Created", + "description": "{executor} created a webhook {webhook} in {channel}" + }, + "webhookDelete": { + "title": "Webhook Deleted", + "description": "{executor} deleted the webhook {webhook}" + }, + "webhookUpdate": { + "title": "Webhook Modified", + "description": "{executor} modified the webhook {webhook}" + }, + "webhookAvatarUpdate": { + "title": "Webhook Avatar Updated", + "description": "{executor} updated the avatar for {webhook}", + "description_added": "{executor} added an avatar for {webhook}", + "description_removed": "{executor} removed the avatar for {webhook}", + "linkToOldAvatar": "Link to old avatar", + "linkToNewAvatar": "Link to new avatar" + }, + "statusChannelFollowed": { + "title": "Channel Followed", + "description": "{executor} followed the channel {name} in {channel}" + }, + "statusChannelUnfollowed": { + "title": "Channel Unfollowed", + "description": "{executor} unfollowed the channel {name}" + }, + "statusChannelUpdated": { + "title": "Followed Channel Updated", + "description": "{executor} updated the followed channel {name}" } } \ No newline at end of file diff --git a/bot/en_pr/standard/quarkEvents.json b/bot/en_pr/standard/quarkEvents.json new file mode 100644 index 0000000..32cd39d --- /dev/null +++ b/bot/en_pr/standard/quarkEvents.json @@ -0,0 +1,64 @@ +{ + "serverlogChannelUpdate": { + "title": "Logging Channel Changed", + "description_set": "{executor} set the {type} logging channel to {channel}", + "description_category_disable": "{executor} disabled the {type} logging channel", + "description_unset": "{executor} unset the {type} logging channel" + }, + "serverlogOptionsUpdate": { + "title": "Logging Options Updated", + "description": "{executor} set {option} to {state}", + "pluralkitSupport": "PluralKit Support", + "spoilers": "Spoilers", + "buttons": "Buttons", + "formatType": "Format Type" + }, + "serverlogLogUpdate": { + "title": "Log Updated", + "description": "{executor} updated the {type} log", + "enabled": "Enabled", + "logFormat": "Format", + "logChannel": "Channel", + "colour": "Colour", + "ignoreBotExecutors": "Ignore Bot Executors", + "ignoreBotTargets": "Ignore Bot Targets", + "activeIgnore": "Active Ignore" + }, + "serverlogIgnoreUpdate": { + "title": "Ignore Options Updated", + "description_set": "{executor} enabled {type}", + "description_unset": "{executor} disabled {type}", + "description_added": "{executor} added {target} to {type}", + "description_removed": "{executor} removed {target} from {type}" + }, + "languageUpdate": { + "title": "Language Changed", + "description": "{executor} changed the language to {language}" + }, + "reset": { + "title": "Configuration Reset", + "description": "{executor} reset the configuration for this server" + }, + "tagAdded": { + "title": "Tag Added", + "description": "{executor} created a tag {tag}" + }, + "tagUpdated": { + "title": "Tag Updated", + "description": "{executor} updated the tag {tag}" + }, + "tagDeleted": { + "title": "Tag Deleted", + "description": "{executor} deleted the tag {tag}" + }, + "tokenAdded": { + "title": "Token Generated", + "description": "{executor} generated a Quark access token with {permissions} permissions for this server", + "unique_id": "Token ID", + "revoke": "Revoke this token" + }, + "tokenRevoked": { + "title": "Token Revoked", + "description": "{executor} revoked the Quark access token with ID {token}" + } +} \ No newline at end of file diff --git a/bot/en_pr/standard/serverActions.json b/bot/en_pr/standard/serverActions.json index 46a6c86..334be6d 100644 --- a/bot/en_pr/standard/serverActions.json +++ b/bot/en_pr/standard/serverActions.json @@ -5,7 +5,8 @@ "description_withoutInviter": "An invite {invite} was created for {channel}", "expires": "Expires", "never": "Never", - "maxUses": "Max Uses" + "maxUses": "Max Uses", + "none": "none" }, "inviteDelete": { "title": "Invite Deleted", @@ -27,5 +28,26 @@ "emojiUpdated": { "title": "Emoji Edited", "description": "{emoji} was edited by {executor}" + }, + "serverEventCreate": { + "title": "Event Created", + "description_withChannel": "{executor} created an event {name} in {channel}", + "description_withoutChannel": "{executor} created an event {name}", + "eventDescription": "Description", + "location": "Location", + "starts": "Starts" + }, + "serverEventDelete": { + "title": "Event Deleted", + "description": "{executor} deleted the event {name}", + "linkToEventImage": "Link to event image" + }, + "serverEventUpdate": { + "title": "Event Updated", + "description": "{executor} updated the event {name}", + "newEventDescription": "New Description", + "newLocation": "New Location", + "newChannel": "New Channel", + "linkToEventImage": "Link to old event image" } } \ No newline at end of file diff --git a/bot/en_pr/standard/textEvents.json b/bot/en_pr/standard/textEvents.json index 1783334..a0b002d 100644 --- a/bot/en_pr/standard/textEvents.json +++ b/bot/en_pr/standard/textEvents.json @@ -31,7 +31,8 @@ "sticker": "sticker", "noContent": "nothin' t' see", "embed": "embed", - "thread": "Thread" + "thread": "Thread", + "initialReactor": "initial reactor" }, "messagesBulkDeleted": { "title": "Multiple Messages Scrubbed", diff --git a/bot/en_pr/standard/voiceEvents.json b/bot/en_pr/standard/voiceEvents.json index 8e6ed5f..0719f89 100644 --- a/bot/en_pr/standard/voiceEvents.json +++ b/bot/en_pr/standard/voiceEvents.json @@ -30,7 +30,9 @@ }, "voiceLeave": { "title": "Exited Cabin", - "description": "{user} departed from the {channel} cabin" + "description": "{user} departed from the {channel} cabin", + "joined": "Present", + "joinedValue": "{relative} for {relative_fixed}" }, "voiceDisconnect": { "title": "Thrown Out", @@ -67,5 +69,36 @@ "description": "{executor} set the status for {channel}", "status": "Status", "linksToEmojis": "Links to emojis" + }, + "stageStarted": { + "title": "Stage Started", + "description": "{executor} started a stage in {channel}", + "topic": "Topic" + }, + "stageEnded": { + "title": "Stage Ended", + "description": "The stage in {channel} was ended by {executor}", + "description_noExecutor": "The stage in {channel} was ended", + "topic": "Topic", + "none": "none" + }, + "stageUpdated": { + "title": "Stage Updated", + "description": "The stage in {channel} was updated by {executor}", + "oldTopic": "Old Topic", + "newTopic": "New Topic" + }, + "stageSpeakerAdd": { + "title": "New Stage Speaker", + "description": "{user} became a speaker in the {channel} stage channel", + "description_inviteAccepted": "{user} accepted the invite to become a speaker in the {channel} stage channel" + }, + "stageSpeakerRemove": { + "title": "Stopped Speaking", + "description": "{user} is no longer a speaker in the {channel} stage channel" + }, + "stageSpeakerInvited": { + "title": "Speaker Invited", + "description": "{user} was invited to speak in the {channel} stage channel" } } \ No newline at end of file diff --git a/bot/en_pr/time.json b/bot/en_pr/time.json new file mode 100644 index 0000000..ee6e28d --- /dev/null +++ b/bot/en_pr/time.json @@ -0,0 +1,16 @@ +{ + "second": "{time} second", + "second-plural": "{time} seconds", + "minute": "{time} minute", + "minute-plural": "{time} minutes", + "hour": "{time} hour", + "hour-plural": "{time} hours", + "day": "{time} day", + "day-plural": "{time} days", + "week": "{time} week", + "week-plural": "{time} weeks", + "month": "{time} month", + "month-plural": "{time} months", + "year": "{time} year", + "year-plural": "{time} years" +} \ No newline at end of file diff --git a/bot/en_us/access_token.json b/bot/en_us/access_token.json new file mode 100644 index 0000000..721f000 --- /dev/null +++ b/bot/en_us/access_token.json @@ -0,0 +1,4 @@ +{ + "1": "Admin", + "2": "Basic" +} \ No newline at end of file diff --git a/bot/en_us/channel_update_types.json b/bot/en_us/channel_update_types.json new file mode 100644 index 0000000..720ce9b --- /dev/null +++ b/bot/en_us/channel_update_types.json @@ -0,0 +1,3 @@ +{ + "none": "none" +} \ No newline at end of file diff --git a/bot/en_us/command_responses.json b/bot/en_us/command_responses.json index 441780f..1130fbc 100644 --- a/bot/en_us/command_responses.json +++ b/bot/en_us/command_responses.json @@ -50,11 +50,11 @@ "response-unban": "Unbanned", "response-purge": "Purged {count} messages", - "response-customise-dash": "Customization settings have moved to our [web dashboard]!", - "response-customise-1": "Log messages up to 2 weeks old, customise logs, and so much more with Quark Pro...", + "response-customise-dash": "Customization settings have moved to Quark's [web dashboard]!", + "response-customise-1": "Log messages up to 2 weeks old, customize logs, and so much more with Quark Pro...", "response-customise-2": "[UK, US, EU] Click onto my profile to upgrade!", - "response-customise-3": "Or... {proLink}", - "response-customise-4": "Try out colour customisation for free at {inventoryLink}", + "response-customise-3": "See subscriptions... {proLink}", + "response-customise-4": "Try out color customization for free at {inventoryLink}", "response-case-updated": "Case updated!", @@ -104,11 +104,17 @@ "setserverlog-type-channels-1": "channel events", "setserverlog-type-modlogs-0": "Modlogs", "setserverlog-type-modlogs-1": "modlogs", + "setserverlog-type-quark-0": "Quark Events", + "setserverlog-type-quark-1": "quark events", "setserverlog-spoilers": "Spoilers", "setserverlog-spoilers-0": "Serverlog spoilers set to {result}", "setserverlog-enable-status-updates": "Enable Status Updates!", "setserverlog-enable-status-updates-desc": "Get notified of all the latest updates, downtime, and other important communications from the developers!", "setserverlog-enable-status-updates-desc-1": "We highly recommend you enable this in one of your channels!", + "setserverlog-check-permissions": "Please ensure Quark has permission to send messages in this channel, or the channel will be unset.", + + "festive-title": "Free Festive Gift!", + "festive-claim": "Claim your free gift!", "help-overview-website-description": "Easily set up and manage Quark from the [web dashboard]!", "help-overview-inventory-description": "Manage your subscriptions or get some [Quark Pro] features for free!", @@ -154,6 +160,9 @@ "need-to-vote": "Click here to vote", "need-to-vote-footer": "Votes take up to a minute to be registered", + "initialreactors-expired": "expired", + "initialreactors-notfound": "No reactions found", + "configCommand": { "title": "Serverlog Configuration", "selection": "Select a category in the menu to view configuration.", @@ -202,6 +211,10 @@ "title": "Overview", "description": "Overview of main category options" }, + "quarkEvents": { + "title": "Quark Config", + "description": "Changes made to Quark's configuration for this server" + }, "fileEvents": { "title": "Files" } diff --git a/bot/en_us/emoji_update_types.json b/bot/en_us/emoji_update_types.json new file mode 100644 index 0000000..720ce9b --- /dev/null +++ b/bot/en_us/emoji_update_types.json @@ -0,0 +1,3 @@ +{ + "none": "none" +} \ No newline at end of file diff --git a/bot/en_us/gui_constants.json b/bot/en_us/gui_constants.json index 747102d..993c5e2 100644 --- a/bot/en_us/gui_constants.json +++ b/bot/en_us/gui_constants.json @@ -33,5 +33,9 @@ "explicit_content_filter": "Explicit Content Filter", "nsfw_level": "NSFW Level", "premium_progress_bar_enabled": "Progress Bar" + }, + "webhookModificationTypes": { + "name": "Name", + "channel_id": "Channel" } } \ No newline at end of file diff --git a/bot/en_us/ignore_options.json b/bot/en_us/ignore_options.json new file mode 100644 index 0000000..197476a --- /dev/null +++ b/bot/en_us/ignore_options.json @@ -0,0 +1,12 @@ +{ + "ignoreTargets": "Ignore Target Users", + "ignoreExecutors": "Ignore Target Executors", + "specificMessageContent": "Ignore Specific Message Content", + "ignoreChannels": "Ignore Channels", + "ignoreBotExecutors": "Ignore Bot Executors", + "ignoreBotTargets": "Ignore Bot Targets", + "ignoreExecutorRoles": "Ignore Executor Roles", + "ignoreTargetRoles": "Ignore Target Roles", + "ignoreCategories": "Ignore Categories", + "activeIgnore": "Active Ignore" +} \ No newline at end of file diff --git a/bot/en_us/log_categories.json b/bot/en_us/log_categories.json new file mode 100644 index 0000000..3279228 --- /dev/null +++ b/bot/en_us/log_categories.json @@ -0,0 +1,13 @@ +{ + "serverEvents": "Members", + "serverActions": "Actions", + "textEvents": "Messages", + "voiceEvents": "Voice", + "fileEvents": "Files", + "generalEvents": "Server", + "roleEvents": "Roles", + "channelEvents": "Channels", + "quarkEvents": "Quark Config", + "modLog": "Modlogs", + "main": "Main" +} \ No newline at end of file diff --git a/bot/en_us/log_formats.json b/bot/en_us/log_formats.json new file mode 100644 index 0000000..7531cd0 --- /dev/null +++ b/bot/en_us/log_formats.json @@ -0,0 +1,7 @@ +{ + "0": "Standard", + "1": "Compact", + "2": "Standard (no embed)", + "3": "Compact (no embed)", + "4": "json" +} \ No newline at end of file diff --git a/bot/en_us/slash_commands/dashboard.json b/bot/en_us/slash_commands/dashboard.json new file mode 100644 index 0000000..36050cd --- /dev/null +++ b/bot/en_us/slash_commands/dashboard.json @@ -0,0 +1,4 @@ +{ + "name": "dashboard", + "description": "Visit Quark's web dashboard" +} \ No newline at end of file diff --git a/bot/en_us/slash_commands/initialReactor.json b/bot/en_us/slash_commands/initialReactor.json new file mode 100644 index 0000000..61bbbbb --- /dev/null +++ b/bot/en_us/slash_commands/initialReactor.json @@ -0,0 +1,3 @@ +{ + "name": "See initial reactors" +} \ No newline at end of file diff --git a/bot/en_us/slash_commands/premium.json b/bot/en_us/slash_commands/premium.json new file mode 100644 index 0000000..5ab0d12 --- /dev/null +++ b/bot/en_us/slash_commands/premium.json @@ -0,0 +1,4 @@ +{ + "name": "premium", + "description": "Get information about the premium subscriptions Quark has" +} \ No newline at end of file diff --git a/bot/en_us/standard/channelEvents.json b/bot/en_us/standard/channelEvents.json index b3b20ae..3ac3e9c 100644 --- a/bot/en_us/standard/channelEvents.json +++ b/bot/en_us/standard/channelEvents.json @@ -1,30 +1,62 @@ { "channelCreated": { - "title": "Channel Created", + "title": "{type} Channel Created", "description": "{channel} was created by {executor}", "descriptionWithCategory": "{channel} was created by {executor} under the {category} category." }, "channelDeleted": { - "title": "Channel Deleted", + "title": "{type} Channel Deleted", "description": "{channel_name} was deleted by {executor}", "channel": "Channel" }, "channelUpdated": { - "title": "Channel Modified", + "title": "{type} Channel Modified", "description": "{channel} was modified by {executor}" }, "channelOverwriteCreate": { - "title": "Channel Permissions Added", + "title": "{type} Channel Permissions Added", "description": "{executor} added permissions to {channel} for {special}" }, "channelOverwriteDelete": { - "title": "Channel Permissions Removed", + "title": "{type} Channel Permissions Removed", "description": "{executor} removed permissions from {channel} for {special}" }, "channelOverwriteUpdate": { - "title": "Channel Permissions Updated", + "title": "{type} Channel Permissions Updated", "description": "{executor} updated permissions for {channel} for {special}", "newPermissions": "New Permissions", "viewFullNewPermissions": "View Full New Permissions" + }, + "webhookCreate": { + "title": "Webhook Created", + "description": "{executor} created a webhook {webhook} in {channel}" + }, + "webhookDelete": { + "title": "Webhook Deleted", + "description": "{executor} deleted the webhook {webhook}" + }, + "webhookUpdate": { + "title": "Webhook Modified", + "description": "{executor} modified the webhook {webhook}" + }, + "webhookAvatarUpdate": { + "title": "Webhook Avatar Updated", + "description": "{executor} updated the avatar for {webhook}", + "description_added": "{executor} added an avatar for {webhook}", + "description_removed": "{executor} removed the avatar for {webhook}", + "linkToOldAvatar": "Link to old avatar", + "linkToNewAvatar": "Link to new avatar" + }, + "statusChannelFollowed": { + "title": "Channel Followed", + "description": "{executor} followed the channel {name} in {channel}" + }, + "statusChannelUnfollowed": { + "title": "Channel Unfollowed", + "description": "{executor} unfollowed the channel {name}" + }, + "statusChannelUpdated": { + "title": "Followed Channel Updated", + "description": "{executor} updated the followed channel {name}" } } \ No newline at end of file diff --git a/bot/en_us/standard/quarkEvents.json b/bot/en_us/standard/quarkEvents.json new file mode 100644 index 0000000..9553f48 --- /dev/null +++ b/bot/en_us/standard/quarkEvents.json @@ -0,0 +1,64 @@ +{ + "serverlogChannelUpdate": { + "title": "Logging Channel Changed", + "description_set": "{executor} set the {type} logging channel to {channel}", + "description_category_disable": "{executor} disabled the {type} logging channel", + "description_unset": "{executor} unset the {type} logging channel" + }, + "serverlogOptionsUpdate": { + "title": "Logging Options Updated", + "description": "{executor} set {option} to {state}", + "pluralkitSupport": "PluralKit Support", + "spoilers": "Spoilers", + "buttons": "Buttons", + "formatType": "Format Type" + }, + "serverlogLogUpdate": { + "title": "Log Updated", + "description": "{executor} updated the {type} log", + "enabled": "Enabled", + "logFormat": "Format", + "logChannel": "Channel", + "colour": "Color", + "ignoreBotExecutors": "Ignore Bot Executors", + "ignoreBotTargets": "Ignore Bot Targets", + "activeIgnore": "Active Ignore" + }, + "serverlogIgnoreUpdate": { + "title": "Ignore Options Updated", + "description_set": "{executor} enabled {type}", + "description_unset": "{executor} disabled {type}", + "description_added": "{executor} added {target} to {type}", + "description_removed": "{executor} removed {target} from {type}" + }, + "languageUpdate": { + "title": "Language Changed", + "description": "{executor} changed the language to {language}" + }, + "reset": { + "title": "Configuration Reset", + "description": "{executor} reset the configuration for this server" + }, + "tagAdded": { + "title": "Tag Added", + "description": "{executor} created a tag {tag}" + }, + "tagUpdated": { + "title": "Tag Updated", + "description": "{executor} updated the tag {tag}" + }, + "tagDeleted": { + "title": "Tag Deleted", + "description": "{executor} deleted the tag {tag}" + }, + "tokenAdded": { + "title": "Token Generated", + "description": "{executor} generated a Quark access token with {permissions} permissions for this server", + "unique_id": "Token ID", + "revoke": "Revoke this token" + }, + "tokenRevoked": { + "title": "Token Revoked", + "description": "{executor} revoked the Quark access token with ID {token}" + } +} \ No newline at end of file diff --git a/bot/en_us/standard/serverActions.json b/bot/en_us/standard/serverActions.json index 46a6c86..334be6d 100644 --- a/bot/en_us/standard/serverActions.json +++ b/bot/en_us/standard/serverActions.json @@ -5,7 +5,8 @@ "description_withoutInviter": "An invite {invite} was created for {channel}", "expires": "Expires", "never": "Never", - "maxUses": "Max Uses" + "maxUses": "Max Uses", + "none": "none" }, "inviteDelete": { "title": "Invite Deleted", @@ -27,5 +28,26 @@ "emojiUpdated": { "title": "Emoji Edited", "description": "{emoji} was edited by {executor}" + }, + "serverEventCreate": { + "title": "Event Created", + "description_withChannel": "{executor} created an event {name} in {channel}", + "description_withoutChannel": "{executor} created an event {name}", + "eventDescription": "Description", + "location": "Location", + "starts": "Starts" + }, + "serverEventDelete": { + "title": "Event Deleted", + "description": "{executor} deleted the event {name}", + "linkToEventImage": "Link to event image" + }, + "serverEventUpdate": { + "title": "Event Updated", + "description": "{executor} updated the event {name}", + "newEventDescription": "New Description", + "newLocation": "New Location", + "newChannel": "New Channel", + "linkToEventImage": "Link to old event image" } } \ No newline at end of file diff --git a/bot/en_us/standard/textEvents.json b/bot/en_us/standard/textEvents.json index df695f2..5037d39 100644 --- a/bot/en_us/standard/textEvents.json +++ b/bot/en_us/standard/textEvents.json @@ -31,7 +31,8 @@ "sticker": "sticker", "noContent": "no content", "embed": "embed", - "thread": "Thread" + "thread": "Thread", + "initialReactor": "initial reactor" }, "messagesBulkDeleted": { "title": "Multiple Messages Deleted", diff --git a/bot/en_us/standard/voiceEvents.json b/bot/en_us/standard/voiceEvents.json index 796433b..f401b34 100644 --- a/bot/en_us/standard/voiceEvents.json +++ b/bot/en_us/standard/voiceEvents.json @@ -30,7 +30,9 @@ }, "voiceLeave": { "title": "Left Channel", - "description": "{user} left the {channel} voice channel" + "description": "{user} left the {channel} voice channel", + "joined": "Joined", + "joinedValue": "{relative} for {relative_fixed}" }, "voiceDisconnect": { "title": "Disconnected", @@ -67,5 +69,36 @@ "description": "{executor} set the status for {channel}", "status": "Status", "linksToEmojis": "Links to emojis" + }, + "stageStarted": { + "title": "Stage Started", + "description": "{executor} started a stage in {channel}", + "topic": "Topic" + }, + "stageEnded": { + "title": "Stage Ended", + "description": "The stage in {channel} was ended by {executor}", + "description_noExecutor": "The stage in {channel} was ended", + "topic": "Topic", + "none": "none" + }, + "stageUpdated": { + "title": "Stage Updated", + "description": "The stage in {channel} was updated by {executor}", + "oldTopic": "Old Topic", + "newTopic": "New Topic" + }, + "stageSpeakerAdd": { + "title": "New Stage Speaker", + "description": "{user} became a speaker in the {channel} stage channel", + "description_inviteAccepted": "{user} accepted the invite to become a speaker in the {channel} stage channel" + }, + "stageSpeakerRemove": { + "title": "Stopped Speaking", + "description": "{user} is no longer a speaker in the {channel} stage channel" + }, + "stageSpeakerInvited": { + "title": "Speaker Invited", + "description": "{user} was invited to speak in the {channel} stage channel" } } \ No newline at end of file diff --git a/bot/en_us/time.json b/bot/en_us/time.json new file mode 100644 index 0000000..ee6e28d --- /dev/null +++ b/bot/en_us/time.json @@ -0,0 +1,16 @@ +{ + "second": "{time} second", + "second-plural": "{time} seconds", + "minute": "{time} minute", + "minute-plural": "{time} minutes", + "hour": "{time} hour", + "hour-plural": "{time} hours", + "day": "{time} day", + "day-plural": "{time} days", + "week": "{time} week", + "week-plural": "{time} weeks", + "month": "{time} month", + "month-plural": "{time} months", + "year": "{time} year", + "year-plural": "{time} years" +} \ No newline at end of file diff --git a/bot/languages.json b/bot/languages.json index 487a5e4..9ea9c22 100644 --- a/bot/languages.json +++ b/bot/languages.json @@ -4,5 +4,6 @@ "tr": "tr", "vi": "vi", "en-PR": "en_pr", - "pl": "pl" + "pl": "pl", + "nl": "nl" } diff --git a/bot/nl/slash_commands/commands.json b/bot/nl/slash_commands/commands.json index cd39f11..ba995e9 100644 --- a/bot/nl/slash_commands/commands.json +++ b/bot/nl/slash_commands/commands.json @@ -1,4 +1,4 @@ { - "name": "commando's", - "description": "Bekijk een lijst van Quark's commando's" + "name": "commandos", + "description": "Bekijk een lijst van Quark's commandos" } \ No newline at end of file diff --git a/bot/pl/channel_types.json b/bot/pl/channel_types.json index b35ef11..d7ffbc6 100644 --- a/bot/pl/channel_types.json +++ b/bot/pl/channel_types.json @@ -1,7 +1,7 @@ { "0": "Tekstowy", "2": "Głosowy", - "4": "Kategoria", + "4": "Kategorii", "5": "Ogłoszeniowy", "10": "Ogłoszeniowy Wątek", "11": "Publiczny Wątek", @@ -10,4 +10,4 @@ "14": "Informacyjny", "15": "Forum", "16": "Media" -} \ No newline at end of file +} diff --git a/bot/pl/command_responses.json b/bot/pl/command_responses.json index b87c1d0..fa2efae 100644 --- a/bot/pl/command_responses.json +++ b/bot/pl/command_responses.json @@ -109,6 +109,10 @@ "setserverlog-enable-status-updates": "Włącz aktualizacje statusu!", "setserverlog-enable-status-updates-desc": "Otrzymuj powiadomienia o wszystkich najnowszych aktualizacjach, przestojach i innych ważnych komunikatach od deweloperów!", "setserverlog-enable-status-updates-desc-1": "Zalecamy włączenie tego w jednym z twoich kanałów!", + "setserverlog-check-permissions": "Proszę, upewnij się że Quark ma uprawnienia do wysyłania wiadomości na tym kanale, albo kanał nie będzie ustawiony.", + + "festive-title": "Free Festive Gift!", + "festive-claim": "Claim your free gift!", "help-overview-website-description": "Łatwo skonfiguruj i zarządzaj Quark z [web dashboard]!", "help-overview-inventory-description": "Zarządzaj swoimi subskrypcjami lub uzyskaj niektóre funkcje [Quark Pro] za darmo!", diff --git a/bot/pl/read_me.txt b/bot/pl/read_me.txt deleted file mode 100644 index 242d7a8..0000000 --- a/bot/pl/read_me.txt +++ /dev/null @@ -1 +0,0 @@ -Translations from English to Polish are 100% complete> ( You can delete this ) \ No newline at end of file diff --git a/bot/pl/standard/channelEvents.json b/bot/pl/standard/channelEvents.json index b6447a4..9df6eb9 100644 --- a/bot/pl/standard/channelEvents.json +++ b/bot/pl/standard/channelEvents.json @@ -1,30 +1,30 @@ { "channelCreated": { - "title": "Kanał Utworzony", + "title": "Utworzono Kanał {type}", "description": "{channel} został utworzony przez {executor}", "descriptionWithCategory": "{channel} został utworzony przez {executor} w kategorii {category}." }, "channelDeleted": { - "title": "Kanał Usunięty", + "title": "Usunięto Kanał {type}", "description": "{channel_name} został usunięty przez {executor}", "channel": "Kanał" }, "channelUpdated": { - "title": "Kanał Zmodyfikowany", + "title": "Zmodyfikowano Kanał {type}", "description": "{channel} został zmodyfikowany przez {executor}" }, "channelOverwriteCreate": { - "title": "Dodano Uprawnienia do Kanału", + "title": "Dodano Uprawnienia do Kanału {type}", "description": "{executor} dodał uprawnienia do {channel} dla {special}" }, "channelOverwriteDelete": { - "title": "Usunięto Uprawnienia z Kanału", + "title": "Usunięto Uprawnienia z Kanału {type}", "description": "{executor} usunął uprawnienia z {channel} dla {special}" }, "channelOverwriteUpdate": { - "title": "Zaktualizowano Uprawnienia Kanału", + "title": "Zaktualizowano Uprawnienia Kanału {type}", "description": "{executor} zaktualizował uprawnienia dla {channel} dla {special}", "newPermissions": "Nowe Uprawnienia", "viewFullNewPermissions": "Zobacz Pełne Nowe Uprawnienia" } -} \ No newline at end of file +} diff --git a/bot/tr/command_responses.json b/bot/tr/command_responses.json index 4da49a6..c23608a 100644 --- a/bot/tr/command_responses.json +++ b/bot/tr/command_responses.json @@ -109,6 +109,10 @@ "setserverlog-enable-status-updates": "Enable Status Updates!", "setserverlog-enable-status-updates-desc": "Get notified of all the latest updates, downtime, and other important communications from the developers!", "setserverlog-enable-status-updates-desc-1": "We highly recommend you enable this in one of your channels!", + "setserverlog-check-permissions": "Please ensure Quark has permission to send messages in this channel, or the channel will be unset.", + + "festive-title": "Free Festive Gift!", + "festive-claim": "Claim your free gift!", "help-overview-website-description": "Easily set up and manage Quark from the [web dashboard]!", "help-overview-inventory-description": "Manage your subscriptions or get some [Quark Pro] features for free!", diff --git a/bot/tr/standard/channelEvents.json b/bot/tr/standard/channelEvents.json index 0c0ff7c..2f1d621 100644 --- a/bot/tr/standard/channelEvents.json +++ b/bot/tr/standard/channelEvents.json @@ -1,16 +1,30 @@ { "channelCreated": { - "title": "Channel Created", + "title": "{type} Channel Created", "description": "{channel} was created by {executor}", "descriptionWithCategory": "{channel} was created by {executor} under the {category} category." }, "channelDeleted": { - "title": "Channel Deleted", + "title": "{type} Channel Deleted", "description": "{channel_name} was deleted by {executor}", "channel": "Channel" }, "channelUpdated": { - "title": "Channel Modified", + "title": "{type} Channel Modified", "description": "{channel} was modified by {executor}" + }, + "channelOverwriteCreate": { + "title": "{type} Channel Permissions Added", + "description": "{executor} added permissions to {channel} for {special}" + }, + "channelOverwriteDelete": { + "title": "{type} Channel Permissions Removed", + "description": "{executor} removed permissions from {channel} for {special}" + }, + "channelOverwriteUpdate": { + "title": "{type} Channel Permissions Updated", + "description": "{executor} updated permissions for {channel} for {special}", + "newPermissions": "New Permissions", + "viewFullNewPermissions": "View Full New Permissions" } } \ No newline at end of file diff --git a/bot/vi/command_responses.json b/bot/vi/command_responses.json index 2231c1e..9140ace 100644 --- a/bot/vi/command_responses.json +++ b/bot/vi/command_responses.json @@ -109,6 +109,10 @@ "setserverlog-enable-status-updates": "Bật Cập nhật Trạng thái!", "setserverlog-enable-status-updates-desc": "Nhận thông báo về tất cả các cập nhật mới nhất, thời gian chạy và các thông tin quan trọng khác từ các nhà phát triển!", "setserverlog-enable-status-updates-desc-1": "Chúng tôi rất khuyến nghị bạn bật tính năng này trong một trong các kênh của bạn!", + "setserverlog-check-permissions": "Vui lòng đảm bảo Quark có quyền gửi tin nhắn trong kênh này, hoặc kênh sẽ bị hủy đặt.", + + "festive-title": "Quà miễn phí trong mùa lễ!", + "festive-claim": "Nhận quà miễn phí của bạn!", "help-overview-website-description": "Dễ dàng thiết lập và quản lý Quark từ [bảng điều khiển web]!", "help-overview-inventory-description": "Quản lý các đăng ký của bạn hoặc nhận một số tính năng [Quark Pro] miễn phí!",