diff --git a/.github/scripts/compare-languages.js b/.github/scripts/compare-languages.js index fcb1f4c..8e3f742 100644 --- a/.github/scripts/compare-languages.js +++ b/.github/scripts/compare-languages.js @@ -1,74 +1,92 @@ -const fs = require('fs'); -const path = require('path'); +import { readFileSync, readdirSync, statSync } from "fs"; +import { join, relative } from "path"; function readJson(filePath) { - const rawData = fs.readFileSync(filePath, 'utf8'); - return JSON.parse(rawData); + const rawData = 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; + let jsonFiles = []; + const files = readdirSync(directory); + + files.forEach((file) => { + const fullPath = join(directory, file); + if (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 }; + const enUsFiles = getAllJsonFiles(enUsDir); + const otherLangFiles = getAllJsonFiles(otherLangDir); + + const enUsFilesRelative = enUsFiles.map((file) => relative(enUsDir, file)); + const otherLangFilesRelative = otherLangFiles.map((file) => + relative(otherLangDir, file) + ); + + const missingFiles = enUsFilesRelative.filter( + (file) => !otherLangFilesRelative.includes(file) + ); + + const missingKeys = {}; + + enUsFilesRelative.forEach((file) => { + if (otherLangFilesRelative.includes(file)) { + const enUsJson = readJson(join(enUsDir, file)); + const otherLangJson = readJson(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 enUsDir = join(baseDir, "en_us"); + const languages = readdirSync(baseDir).filter( + (dir) => statSync(join(baseDir, dir)).isDirectory() && dir !== "en_us" + ); + + const report = {}; + + languages.forEach((lang) => { + const langDir = join(baseDir, lang); + const { missingFiles, missingKeys } = compareJsonFiles(enUsDir, langDir); + report[lang] = { missingFiles, missingKeys }; + }); + + return report; } -const baseDirectory = './bot/'; +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(); + 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-json.js b/.github/scripts/validate-json.js index ea039b3..f2eb32d 100644 --- a/.github/scripts/validate-json.js +++ b/.github/scripts/validate-json.js @@ -1,43 +1,45 @@ -const fs = require('fs'); -const path = require('path'); +import { readdirSync, statSync, readFileSync } from "fs"; +import { join } from "path"; -const baseDirectory = './bot'; +const baseDirectory = "./bot"; let foundErrors = false; function validateJSONFiles(directory) { - try { - const files = fs.readdirSync(directory); + try { + const files = readdirSync(directory); - files.forEach(file => { - const filePath = path.join(directory, file); - const stat = fs.statSync(filePath); + files.forEach((file) => { + const filePath = join(directory, file); + const stat = statSync(filePath); - if (stat.isDirectory()) { - validateJSONFiles(filePath); - } else if (file.endsWith('.json')) { - console.log(`Validating ${filePath}...`); - try { - const data = fs.readFileSync(filePath, 'utf8'); - JSON.parse(data); - } catch (err) { - console.error(`Error processing ${filePath}: ${err.message}`); - foundErrors = true; - } - } - }); - } catch (err) { - console.error(`Error reading directory ${directory}: ${err.message}`); - process.exit(1); - } + if (stat.isDirectory()) { + validateJSONFiles(filePath); + } else if (file.endsWith(".json")) { + console.log(`Validating ${filePath}...`); + try { + const data = readFileSync(filePath, "utf8"); + JSON.parse(data); + } catch (err) { + console.error(`Error processing ${filePath}: ${err.message}`); + foundErrors = true; + } + } + }); + } catch (err) { + console.error(`Error reading directory ${directory}: ${err.message}`); + process.exit(1); + } } validateJSONFiles(baseDirectory); if (foundErrors) { - console.error("Validation errors found in some JSON files. Please check the logs above."); - process.exit(1); + console.error( + "Validation errors found in some JSON files. Please check the logs above." + ); + process.exit(1); } else { - console.log("All JSON files validated successfully."); - process.exit(0); + console.log("All JSON files validated successfully."); + process.exit(0); } diff --git a/.github/scripts/validate-slash_commands.js b/.github/scripts/validate-slash_commands.js index 34c8cc1..6d24e90 100644 --- a/.github/scripts/validate-slash_commands.js +++ b/.github/scripts/validate-slash_commands.js @@ -1,94 +1,120 @@ -const fs = require('fs'); -const path = require('path'); +import { readFileSync, existsSync, readdirSync } from "fs"; +import { join } from "path"; -const baseDirectory = './bot'; -const conversionFile = './bot/languages.json'; +const baseDirectory = "./bot"; +const conversionFile = "./bot/languages.json"; let foundErrors = false; const nonChatInputCommands = ["initialReactor.json"]; try { - const conversionData = fs.readFileSync(conversionFile, 'utf8'); - const languageMap = JSON.parse(conversionData); + const conversionData = readFileSync(conversionFile, "utf8"); + const languageMap = JSON.parse(conversionData); - Object.entries(languageMap).forEach(([key, value]) => { - const directory = path.join(baseDirectory, value, 'slash_commands'); - 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; - } - - files.forEach(file => { - if (!file.endsWith('.json')) { - console.log(`Skipping non-JSON file: ${file}`); - return; - } - - console.log(`Validating ${value}/${file}...`) - const filePath = path.join(directory, file); - try { - const data = fs.readFileSync(filePath, 'utf8'); - const jsonData = JSON.parse(data); + Object.entries(languageMap).forEach(([key, value]) => { + const directory = join(baseDirectory, value, "slash_commands"); + if (!existsSync(directory)) { + console.log( + `Skipping non-existent directory: ${directory} for language code ${key}` + ); + return; + } - function checkFields(obj, path = '') { - Object.keys(obj).forEach(key => { - const value = obj[key]; - const currentPath = path ? `${path}.${key}` : key; + const files = readdirSync(directory); + if (files.length === 0) { + console.log(`No JSON files found in ${directory}.`); + return; + } - if (typeof value === 'string') { + files.forEach((file) => { + if (!file.endsWith(".json")) { + console.log(`Skipping non-JSON file: ${file}`); + return; + } - 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.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; - } + console.log(`Validating ${value}/${file}...`); + const filePath = join(directory, file); + try { + const data = readFileSync(filePath, "utf8"); + const jsonData = JSON.parse(data); - } else if (typeof value === 'object' && value !== null) { - checkFields(value, currentPath); - } - }); - } - if (!nonChatInputCommands.includes(file)) { - checkFields(jsonData); + function checkFields(obj, path = "") { + Object.keys(obj).forEach((key) => { + const value = obj[key]; + const currentPath = path ? `${path}.${key}` : key; - 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); + 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.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); - if (foundErrors) { - console.error("Validation errors found in some JSON files. Please check the logs above."); - process.exit(1); - } else { - console.log("All files validated successfully."); - process.exit(0); - } + 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; + } + }); + }); -} catch (err) { - console.error("Error reading the conversion file or directory:", err); + if (foundErrors) { + console.error( + "Validation errors found in some JSON files. Please check the logs above." + ); process.exit(1); + } else { + console.log("All files validated successfully."); + process.exit(0); + } +} catch (err) { + console.error("Error reading the conversion file or directory:", err); + process.exit(1); } diff --git a/activate.js b/activate.js index 381cd1b..f799472 100644 --- a/activate.js +++ b/activate.js @@ -1,95 +1,121 @@ -const fs = require('fs'); -const path = require('path'); +import fs from "fs"; +import path from "path"; const fallbackLanguage = "en_us"; const baseDirectory = "bot"; -const languages = require('./bot/languages.json'); +import languages from "./bot/languages.json" with { type: "json" }; const languagesLocation = path.join(process.cwd(), "languages", baseDirectory); -const activeLanguagesLocation = path.join(process.cwd(), "languages", "active", 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); - } - }); + 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; + }); } + 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); - } + 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); - console.log(`Processing language code ${key}...`); - if (!fs.existsSync(directory)) { - console.log(`Skipping non-existent directory: ${directory} for language code ${key}`); - return; - } - - if (!fs.existsSync(activeLanguagesLocation)) - fs.mkdirSync(activeLanguagesLocation, { recursive: true }); - - console.log(`Copying ${directory}...`); - loadSubdirectory(value, "/"); + Object.entries(languages).forEach(([key, value]) => { + 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; + } - }); + if (!fs.existsSync(activeLanguagesLocation)) + fs.mkdirSync(activeLanguagesLocation, { recursive: true }); + console.log(`Copying ${directory}...`); + loadSubdirectory(value, "/"); + }); } -module.exports = activate; \ No newline at end of file +export default activate; diff --git a/bot/pl/access_token.json b/bot/pl/access_token.json new file mode 100644 index 0000000..a7cebc7 --- /dev/null +++ b/bot/pl/access_token.json @@ -0,0 +1,4 @@ +{ + "1": "Administrator", + "2": "Podstawowy" +} diff --git a/bot/pl/channel_update_types.json b/bot/pl/channel_update_types.json new file mode 100644 index 0000000..fc86bc4 --- /dev/null +++ b/bot/pl/channel_update_types.json @@ -0,0 +1,3 @@ +{ + "none": "brak" +} diff --git a/bot/pl/command_responses.json b/bot/pl/command_responses.json index 1577c69..9e68bc8 100644 --- a/bot/pl/command_responses.json +++ b/bot/pl/command_responses.json @@ -1,207 +1,224 @@ -{ - "disable": "Wyłącz", - "enable": "Włącz", - "error-401-0": "Niepowodzenie polecenia", - "error-401-1-type-0": "Nie mogę zbanować tego użytkownika", - "error-401-1-type-1": "Nie mogę wyrzucić tego użytkownika", - "error-401-1-type-2": "Nie mogę wyciszyć tego użytkownika", - "error-401-1-type-3": "Nie mogę odciszyć tego użytkownika", - "error-403-0": "Brak wystarczających uprawnień", - "error-403-1-type-0": "Upewnij się, że mam uprawnienia `BAN_MEMBERS`", - "error-403-1-type-1": "Upewnij się, że mam uprawnienia `KICK_MEMBERS`", - "error-403-1-type-2": "Upewnij się, że mam uprawnienia `MANAGE_ROLES` i że rola `Muted` jest niżej niż moja najwyższa rola", - "error-403-1-type-3": "Upewnij się, że mam uprawnienia `MANAGE_MESSAGES`", - "error-404-0": "Nie znaleziono użytkownika", - "error-404-1": "Proszę oznaczyć użytkownika, wkleić jego ID lub wpisać jego nazwę użytkownika", - "error-405-0": "Słucham?", - "error-405-1": "Nie zrobię tego lol", - "error-406-0": "Nie masz uprawnień", - "error-407-0": "Nie masz władzy, aby to zrobić", - "error-409-0-type-0": "Ten użytkownik jest już zbanowany", - "error-409-0-type-1": "Ten użytkownik jest już wyciszony", - "error-409-0-type-2": "Ten użytkownik jest już odbanowany", - "error-409-0-type-3": "Ten użytkownik jest już odciszony", - "error-429-0": "Nieprawidłowy numer", - "error-429-1": "Wprowadź prawidłową liczbę całkowitą w zakresie (1-100)", - "error-430-0": "Brak wiadomości", - "error-430-1": "Nie znaleziono wiadomości do usunięcia", - "error-431-0": "Nieprawidłowy link do wiadomości", - "error-431-1": "Wprowadź prawidłowy link do wiadomości", - "error-432-0": "Nieprawidłowy log Quark", - "error-432-1": "Ta wiadomość nie jest prawidłowym logiem Quark", - "error-433-0": "Nieprawidłowe wiadomości początkowe i końcowe", - "error-433-1": "Wiadomość początkowa musi być starsza niż wiadomość końcowa", - "error-434-0": "Różne kanały", - "error-434-1": "Wiadomość początkowa i końcowa muszą należeć do tego samego kanału", - "error-435-0": "Aktywny czas oczekiwania", - "error-435-1": "To polecenie można używać tylko co 15 minut", - "error-try-help-again": "Spróbuj ponownie uruchomić polecenie pomocy...", - "error-no-modlog": "Brak kanału modlog", - "error-invalid-log": "Nie znaleziono sprawy modlog", - "error-timeout-period-too-long-0": "Okres czasu oczekiwania jest zbyt długi", - "error-timeout-period-too-long-1": "Okres czasu oczekiwania musi być krótszy niż 28 dni", - "response-ban": "Zbanowany", - "response-kick": "Wyrzucony", - "response-mute": "Wyciszony", - "response-unmute": "Odciszony", - "response-unban": "Odbanowany", - "response-purge": "Usunięto {count} wiadomości", - "response-customise-dash": "Ustawienia personalizacji zostały przeniesione na nasz [web dashboard]!", - "response-customise-1": "Loguj wiadomości do 2 tygodni wstecz, personalizuj logi i wiele więcej z Quark Pro...", - "response-customise-2": "[UK, US, EU] Kliknij na mój profil, aby przejść na wyższy poziom!", - "response-customise-3": "Lub... {proLink}", - "response-customise-4": "Wypróbuj personalizację kolorów za darmo na {inventoryLink}", - "response-case-updated": "Przypadek zaktualizowany!", - "response-debug": "Wysłano log debugowania!", - "response-status-enabled": "Aktualizacje kanału statusu włączone!", - "response-status-disabled": "Aktualizacje kanału statusu wyłączone!", - "target0-command": "cel", - "target1-command": "cele", - "message0-command": "wiadomość", - "executor0-command": "wykonawca", - "executor1-command": "wykonawcy", - "channel0-command": "kanał", - "channel1-command": "kanały", - "serverlog-web-promote": "...lub sprawdź nasz web dashboard!", - "serverlog-select": "Wybierz kanał serverlog", - "serverlog-unset": "Kanał niezdefiniowany", - "serverlog-set": "Kanał ustawiony", - "serverlog-setchannel": "Kanał ustawiony na {channel}", - "setserverlog-confirm0-set": "Kanał Server-Log ustawiony", - "setserverlog-confirm0-unset": "Kanał Server-Log niezdefiniowany", - "setserverlog-confirm1-set": "Wszystkie wydarzenia server-log będą teraz rejestrowane w tym kanale.\n\n[**Odwiedź web dashboard Quark, aby uzyskać więcej opcji konfiguracji!**]({quark_website_url}/dashboard/{guild_id})", - "setserverlog-confirm1-unset": "Nie będziesz już otrzymywać wiadomości o wydarzeniach, które występują na tym serwerze, chyba że masz ustawione inne kanały do wyjścia tych wydarzeń.", - "setserverlog-confirm0-options-set": "Kanał Server-Log {type} ustawiony", - "setserverlog-confirm0-options-unset": "Kanał Server-Log {type} niezdefiniowany", - "setserverlog-confirm0-options-stoplog": "Logowanie Server-Log {type} zatrzymane", - "setserverlog-confirm1-options-set": "Server {type} będzie teraz rejestrowany w tym kanale.\n\nAby usunąć ten kanał, uruchom ponownie polecenie w tym kanale.", - "setserverlog-confirm1-options-unset": "Server {type} nie będzie już rejestrowany w tym kanale.\n\nAby ustawić ten kanał, uruchom ponownie polecenie w tym kanale.", - "setserverlog-confirm1-options-stoplog": "Server {type} będzie teraz nadal rejestrowany w głównym kanale serverlog (jeśli jest ustawiony).\n\nAby to cofnąć, uruchom ponownie polecenie tutaj.", - "setserverlog-type-members-0": "Członkowie", - "setserverlog-type-members-1": "członkowie", - "setserverlog-type-actions-0": "Akcje", - "setserverlog-type-actions-1": "akcje", - "setserverlog-type-text-0": "Wydarzenia kanału tekstowego", - "setserverlog-type-text-1": "wydarzenia kanału tekstowego", - "setserverlog-type-voice-0": "Wydarzenia kanału głosowego", - "setserverlog-type-voice-1": "wydarzenia kanału głosowego", - "setserverlog-type-files-0": "Pliki", - "setserverlog-type-files-1": "pliki", - "setserverlog-type-server-0": "Serwer", - "setserverlog-type-server-1": "serwer", - "setserverlog-type-roles-0": "Wydarzenia roli", - "setserverlog-type-roles-1": "wydarzenia roli", - "setserverlog-type-channels-0": "Wydarzenia kanału", - "setserverlog-type-channels-1": "wydarzenia kanału", - "setserverlog-type-modlogs-0": "Modlogi", - "setserverlog-type-modlogs-1": "modlogi", - "setserverlog-spoilers": "Spojlery", - "setserverlog-spoilers-0": "Spojlery serverlog ustawione na {result}", - "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!", - "help-overview-view-inv": "Wyświetl inwentarz", - "help-overview-help": "Pomoc", - "help-overview-website": "Strona internetowa", - "help-overview-serverlog": "Serverlog", - "help-overview-modlog": "Modlog", - "help-overview-commands": "Polecenia", - "help-overview-language": "Język", - "help-overview-premium": "Premium", - "help-overview-inventory": "Inwentarz", - "help-overview-channel-isset": "Kanał ustawiony na {channel}", - "help-overview-channel-isnotset": "Uruchom {command} na żądanym kanale", - "help-overview-view-options": "Uruchom {command}, aby zobaczyć opcje", - "help-overview-view-options-and-statuses": "Uruchom {command}, aby zobaczyć statusy i opcje", - "help-overview-view-all-commands": "Uruchom {command}, aby zobaczyć polecenia", - "help-overview-change-channel": "Zmień to, uruchamiając {command} na żądanym kanale.", - "help-overview-manage-premium": "Uruchom {command}, aby zarządzać premium", - "language-set": "Ustaw język na {language}", - "help-serverlog-help": "Pomoc Serverlog", - "help-serverlog-0": "Ograniczenia kanału", - "help-serverlog-1": "Opcje ignorowania", - "help-serverlog-2": "Spojlery", - "help-serverlog-0-desc": "Aby uzyskać większą kontrolę nad logami, np. wybór różnych kanałów dla różnych typów logów, odwiedź [web dashboard Quark]", - "help-serverlog-1-desc": "Aby zapobiec rejestrowaniu niektórych kanałów, użytkowników lub wiadomości, uruchom:\n{ignorecommand}", - "help-serverlog-2-desc": "Aby przełączać, czy spoilery są stosowane do wszystkich mediów wysyłanych w serverlog, uruchom: {command}", - "help-serverlog-2-on": "Spojlery są włączone.", - "help-serverlog-2-off": "Spojlery są wyłączone.", - "help-commands-help": "Pomoc poleceń", - "help-commands-moderation": "Moderacja", - "help-commands-tags": "Tagi", - "help-commands-notes": "Notatki", - "help-commands-other": "Inne", - "help-notes-help": "Pomoc notatek", - "help-tags-help": "Pomoc tagów", - "help-commands-desc": "Klucz:\n`` `[opcjonalne]`\nTo nie jest lista wszystkich poleceń", - "help-info": "Nadal potrzebujesz pomocy? **Dołącz do serwera wsparcia Quark!**", - "need-to-vote-title": "Musisz zagłosować, aby użyć tego polecenia!", - "need-to-vote": "Kliknij tutaj, aby zagłosować", - "need-to-vote-footer": "Głosy są rejestrowane do minuty", - "configCommand": { - "title": "Konfiguracja Serverlog", - "selection": "Wybierz kategorię w menu, aby wyświetlić konfigurację.", - "serverLogDesc": "Główny kanał Serverlog", - "notSet": "Niezdefiniowany", - "selectACategory": "Wybierz kategorię", - "overview": "Przegląd", - "formats": { - "log_channels": "Kanały logów", - "configurable_events": "Konfigurowalne wydarzenia" - }, - "categories": { - "serverEvents": { - "title": "Członkowie", - "description": "Akcje członków (dołączenie/wyjście, role, pseudonimy)" - }, - "textEvents": { - "title": "Wiadomości", - "description": "Akcje wiadomości (usunięcia, edycje, przypięcia, reakcje)" - }, - "voiceEvents": { - "title": "Głos", - "description": "Akcje kanału głosowego (dołączenie/wyjście, transmisje, wyciszenie/ogłuszenie)" - }, - "serverActions": { - "title": "Akcje serwera", - "description": "Akcje serwera (tworzenie/usuwanie zaproszeń, emotikony)" - }, - "channelEvents": { - "title": "Kanały", - "description": "Akcje kanału (tworzenie/usuwanie, uprawnienia)" - }, - "generalEvents": { - "title": "Wydarzenia serwera", - "description": "Ogólne akcje (modyfikacje serwera)" - }, - "roleEvents": { - "title": "Role", - "description": "Akcje ról (tworzenie/usuwanie, uprawnienia)" - }, - "modLog": { - "title": "Logi moderatorów", - "description": "Akcje moderacji (bany, wyrzucenia, wyciszenia)" - }, - "overview": { - "title": "Przegląd", - "description": "Przegląd głównych opcji kategorii" - }, - "fileEvents": { - "title": "Pliki" - }, - "quarkEvents": { - "title": "Quark Config", - "description": "Changes made to Quark's configuration for this server" - } - } - }, - "setserverlog-type-quark-0": "Quark Events", - "setserverlog-type-quark-1": "quark events", - "initialreactors-expired": "expired", - "initialreactors-notfound": "No reactions found" -} +{ + "disable": "Wyłącz", + "enable": "Włącz", + + "error-401-0": "Niepowodzenie polecenia", + "error-401-1-type-0": "Nie mogę zbanować tego użytkownika", + "error-401-1-type-1": "Nie mogę wyrzucić tego użytkownika", + "error-401-1-type-2": "Nie mogę wyciszyć tego użytkownika", + "error-401-1-type-3": "Nie mogę odciszyć tego użytkownika", + "error-403-0": "Brak wystarczających uprawnień", + "error-403-1-type-0": "Upewnij się, że mam uprawnienia `BAN_MEMBERS`", + "error-403-1-type-1": "Upewnij się, że mam uprawnienia `KICK_MEMBERS`", + "error-403-1-type-2": "Upewnij się, że mam uprawnienia `MANAGE_ROLES` i że rola `Muted` jest niżej niż moja najwyższa rola", + "error-403-1-type-3": "Upewnij się, że mam uprawnienia `MANAGE_MESSAGES`", + "error-404-0": "Nie znaleziono użytkownika", + "error-404-1": "Proszę oznaczyć użytkownika, wkleić jego ID lub wpisać jego nazwę użytkownika", + "error-405-0": "Słucham?", + "error-405-1": "Nie zrobię tego lol", + "error-406-0": "Nie masz uprawnień", + "error-407-0": "Nie masz władzy, aby to zrobić", + "error-409-0-type-0": "Ten użytkownik jest już zbanowany", + "error-409-0-type-1": "Ten użytkownik jest już wyciszony", + "error-409-0-type-2": "Ten użytkownik jest już odbanowany", + "error-409-0-type-3": "Ten użytkownik jest już odciszony", + "error-429-0": "Nieprawidłowy numer", + "error-429-1": "Wprowadź prawidłową liczbę całkowitą w zakresie (1-100)", + "error-430-0": "Brak wiadomości", + "error-430-1": "Nie znaleziono wiadomości do usunięcia", + "error-431-0": "Nieprawidłowy link do wiadomości", + "error-431-1": "Wprowadź prawidłowy link do wiadomości", + "error-432-0": "Nieprawidłowy log Quark", + "error-432-1": "Ta wiadomość nie jest prawidłowym logiem Quark", + "error-433-0": "Nieprawidłowe wiadomości początkowe i końcowe", + "error-433-1": "Wiadomość początkowa musi być starsza niż wiadomość końcowa", + "error-434-0": "Różne kanały", + "error-434-1": "Wiadomość początkowa i końcowa muszą należeć do tego samego kanału", + "error-435-0": "Aktywny czas oczekiwania", + "error-435-1": "To polecenie można używać tylko co 15 minut", + "error-try-help-again": "Spróbuj ponownie uruchomić polecenie pomocy...", + "error-no-modlog": "Brak kanału modlog", + "error-invalid-log": "Nie znaleziono sprawy modlog", + + "error-timeout-period-too-long-0": "Okres czasu oczekiwania jest zbyt długi", + "error-timeout-period-too-long-1": "Okres czasu oczekiwania musi być krótszy niż 28 dni", + + "response-ban": "Zbanowany", + "response-kick": "Wyrzucony", + "response-mute": "Wyciszony", + "response-unmute": "Odciszony", + "response-unban": "Odbanowany", + "response-purge": "Usunięto {count} wiadomości", + + "response-customise-dash": "Ustawienia personalizacji zostały przeniesione na nasz [web dashboard]!", + "response-customise-1": "Loguj wiadomości do 2 tygodni wstecz, personalizuj logi i wiele więcej z Quark Pro...", + "response-customise-2": "[UK, US, EU] Kliknij na mój profil, aby przejść na wyższy poziom!", + "response-customise-3": "Lub... {proLink}", + "response-customise-4": "Wypróbuj personalizację kolorów za darmo na {inventoryLink}", + + "response-case-updated": "Przypadek zaktualizowany!", + + "response-debug": "Wysłano log debugowania!", + + "response-status-enabled": "Aktualizacje kanału statusu włączone!", + "response-status-disabled": "Aktualizacje kanału statusu wyłączone!", + + "target0-command": "cel", + "target1-command": "cele", + "message0-command": "wiadomość", + "executor0-command": "wykonawca", + "executor1-command": "wykonawcy", + "channel0-command": "kanał", + "channel1-command": "kanały", + + "serverlog-web-promote": "...lub sprawdź nasz web dashboard!", + "serverlog-select": "Wybierz kanał serverlog", + "serverlog-unset": "Kanał niezdefiniowany", + "serverlog-set": "Kanał ustawiony", + "serverlog-setchannel": "Kanał ustawiony na {channel}", + "setserverlog-confirm0-set": "Kanał Server-Log ustawiony", + "setserverlog-confirm0-unset": "Kanał Server-Log niezdefiniowany", + "setserverlog-confirm1-set": "Wszystkie wydarzenia server-log będą teraz rejestrowane w tym kanale.\n\n[**Odwiedź web dashboard Quark, aby uzyskać więcej opcji konfiguracji!**]({quark_website_url}/dashboard/{guild_id})", + "setserverlog-confirm1-unset": "Nie będziesz już otrzymywać wiadomości o wydarzeniach, które występują na tym serwerze, chyba że masz ustawione inne kanały do wyjścia tych wydarzeń.", + "setserverlog-confirm0-options-set": "Kanał Server-Log {type} ustawiony", + "setserverlog-confirm0-options-unset": "Kanał Server-Log {type} niezdefiniowany", + "setserverlog-confirm0-options-stoplog": "Logowanie Server-Log {type} zatrzymane", + "setserverlog-confirm1-options-set": "Server {type} będzie teraz rejestrowany w tym kanale.\n\nAby usunąć ten kanał, uruchom ponownie polecenie w tym kanale.", + "setserverlog-confirm1-options-unset": "Server {type} nie będzie już rejestrowany w tym kanale.\n\nAby ustawić ten kanał, uruchom ponownie polecenie w tym kanale.", + "setserverlog-confirm1-options-stoplog": "Server {type} będzie teraz nadal rejestrowany w głównym kanale serverlog (jeśli jest ustawiony).\n\nAby to cofnąć, uruchom ponownie polecenie tutaj.", + "setserverlog-type-members-0": "Członkowie", + "setserverlog-type-members-1": "członkowie", + "setserverlog-type-actions-0": "Akcje", + "setserverlog-type-actions-1": "akcje", + "setserverlog-type-text-0": "Wydarzenia kanału tekstowego", + "setserverlog-type-text-1": "wydarzenia kanału tekstowego", + "setserverlog-type-voice-0": "Wydarzenia kanału głosowego", + "setserverlog-type-voice-1": "wydarzenia kanału głosowego", + "setserverlog-type-files-0": "Pliki", + "setserverlog-type-files-1": "pliki", + "setserverlog-type-server-0": "Serwer", + "setserverlog-type-server-1": "serwer", + "setserverlog-type-roles-0": "Wydarzenia roli", + "setserverlog-type-roles-1": "wydarzenia roli", + "setserverlog-type-channels-0": "Wydarzenia kanału", + "setserverlog-type-channels-1": "wydarzenia kanału", + "setserverlog-type-modlogs-0": "Modlogi", + "setserverlog-type-modlogs-1": "modlogi", + "setserverlog-type-modlogs-0": "Modlogi", + "setserverlog-type-modlogs-1": "modlogi", + "setserverlog-spoilers": "Spojlery", + "setserverlog-spoilers-0": "Spojlery serverlog ustawione na {result}", + "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!", + "help-overview-view-inv": "Wyświetl inwentarz", + "help-overview-help": "Pomoc", + "help-overview-website": "Strona internetowa", + "help-overview-serverlog": "Serverlog", + "help-overview-modlog": "Modlog", + "help-overview-commands": "Polecenia", + "help-overview-language": "Język", + "help-overview-premium": "Premium", + "help-overview-inventory": "Inwentarz", + "help-overview-channel-isset": "Kanał ustawiony na {channel}", + "help-overview-channel-isnotset": "Uruchom {command} na żądanym kanale", + "help-overview-view-options": "Uruchom {command}, aby zobaczyć opcje", + "help-overview-view-options-and-statuses": "Uruchom {command}, aby zobaczyć statusy i opcje", + "help-overview-view-all-commands": "Uruchom {command}, aby zobaczyć polecenia", + "help-overview-change-channel": "Zmień to, uruchamiając {command} na żądanym kanale.", + "help-overview-manage-premium": "Uruchom {command}, aby zarządzać premium", + "language-set": "Ustaw język na {language}", + + "help-serverlog-help": "Pomoc Serverlog", + "help-serverlog-0": "Ograniczenia kanału", + "help-serverlog-1": "Opcje ignorowania", + "help-serverlog-2": "Spojlery", + "help-serverlog-0-desc": "Aby uzyskać większą kontrolę nad logami, np. wybór różnych kanałów dla różnych typów logów, odwiedź [web dashboard Quark]", + "help-serverlog-1-desc": "Aby zapobiec rejestrowaniu niektórych kanałów, użytkowników lub wiadomości, uruchom:\n{ignorecommand}", + "help-serverlog-2-desc": "Aby przełączać, czy spoilery są stosowane do wszystkich mediów wysyłanych w serverlog, uruchom: {command}", + "help-serverlog-2-on": "Spojlery są włączone.", + "help-serverlog-2-off": "Spojlery są wyłączone.", + + "help-commands-help": "Pomoc poleceń", + "help-commands-moderation": "Moderacja", + "help-commands-tags": "Tagi", + "help-commands-notes": "Notatki", + "help-commands-other": "Inne", + "help-notes-help": "Pomoc notatek", + "help-tags-help": "Pomoc tagów", + "help-commands-desc": "Klucz:\n`` `[opcjonalne]`\nTo nie jest lista wszystkich poleceń", + "help-info": "Nadal potrzebujesz pomocy? **Dołącz do serwera wsparcia Quark!**", + + "need-to-vote-title": "Musisz zagłosować, aby użyć tego polecenia!", + "need-to-vote": "Kliknij tutaj, aby zagłosować", + "need-to-vote-footer": "Głosy są rejestrowane do minuty", + + "initialreactors-expired": "wykasły", + "initialreactors-notfound": "Nie znaleziono żadnych reakcji", + + "configCommand": { + "title": "Konfiguracja Serverlog", + "selection": "Wybierz kategorię w menu, aby wyświetlić konfigurację.", + "serverLogDesc": "Główny kanał Serverlog", + "notSet": "Niezdefiniowany", + "selectACategory": "Wybierz kategorię", + "overview": "Przegląd", + "formats": { + "log_channels": "Kanały logów", + "configurable_events": "Konfigurowalne wydarzenia" + }, + "categories": { + "serverEvents": { + "title": "Członkowie", + "description": "Akcje członków (dołączenie/wyjście, role, pseudonimy)" + }, + "textEvents": { + "title": "Wiadomości", + "description": "Akcje wiadomości (usunięcia, edycje, przypięcia, reakcje)" + }, + "voiceEvents": { + "title": "Głos", + "description": "Akcje kanału głosowego (dołączenie/wyjście, transmisje, wyciszenie/ogłuszenie)" + }, + "serverActions": { + "title": "Akcje serwera", + "description": "Akcje serwera (tworzenie/usuwanie zaproszeń, emotikony)" + }, + "channelEvents": { + "title": "Kanały", + "description": "Akcje kanału (tworzenie/usuwanie, uprawnienia)" + }, + "generalEvents": { + "title": "Wydarzenia serwera", + "description": "Ogólne akcje (modyfikacje serwera)" + }, + "roleEvents": { + "title": "Role", + "description": "Akcje ról (tworzenie/usuwanie, uprawnienia)" + }, + "modLog": { + "title": "Logi moderatorów", + "description": "Akcje moderacji (bany, wyrzucenia, wyciszenia)" + }, + "overview": { + "title": "Przegląd", + "description": "Przegląd głównych opcji kategorii" + }, + "fileEvents": { + "title": "Pliki" + } + } + }, + + "setserverlog-type-quark-0": "Quark Events", + "setserverlog-type-quark-1": "quark events", + "initialreactors-expired": "expired", + "initialreactors-notfound": "No reactions found" +} diff --git a/bot/pl/emoji_update_types.json b/bot/pl/emoji_update_types.json new file mode 100644 index 0000000..fc86bc4 --- /dev/null +++ b/bot/pl/emoji_update_types.json @@ -0,0 +1,3 @@ +{ + "none": "brak" +} diff --git a/bot/pl/gui_constants.json b/bot/pl/gui_constants.json index 2a3b92e..220c329 100644 --- a/bot/pl/gui_constants.json +++ b/bot/pl/gui_constants.json @@ -33,5 +33,9 @@ "explicit_content_filter": "Filtr zawartości jawnej", "nsfw_level": "Poziom NSFW", "premium_progress_bar_enabled": "Pasek postępu" + }, + "webhookModificationTypes": { + "name": "Nazwa", + "channel_id": "Kanał" } -} \ No newline at end of file +} diff --git a/bot/pl/ignore_options.json b/bot/pl/ignore_options.json new file mode 100644 index 0000000..2dac85c --- /dev/null +++ b/bot/pl/ignore_options.json @@ -0,0 +1,12 @@ +{ + "ignoreTargets": "Ignoruj użytkowników docelowych", + "ignoreExecutors": "Ignoruj wykonawców", + "specificMessageContent": "Ignoruj konkretną treść wiadomości", + "ignoreChannels": "Ignoruj kanały", + "ignoreBotExecutors": "Ignoruj działania botów", + "ignoreBotTargets": "Ignoruj cele botów", + "ignoreExecutorRoles": "Ignoruj role wykonawców", + "ignoreTargetRoles": "Ignoruj role docelowe", + "ignoreCategories": "Ignoruj kategorie", + "activeIgnore": "Aktywne ignorowanie" +} diff --git a/bot/pl/log_categories.json b/bot/pl/log_categories.json new file mode 100644 index 0000000..0452668 --- /dev/null +++ b/bot/pl/log_categories.json @@ -0,0 +1,13 @@ +{ + "serverEvents": "Członkowie", + "serverActions": "Akcje", + "textEvents": "Wiadomości", + "voiceEvents": "Głosowe", + "fileEvents": "Pliki", + "generalEvents": "Serwer", + "roleEvents": "Role", + "channelEvents": "Kanały", + "quarkEvents": "Konfiguracja quark'a", + "modLog": "Dzienniki moderacji", + "main": "Głowne" +} diff --git a/bot/pl/log_formats.json b/bot/pl/log_formats.json new file mode 100644 index 0000000..cb4c176 --- /dev/null +++ b/bot/pl/log_formats.json @@ -0,0 +1,7 @@ +{ + "0": "Standardowe", + "1": "Kompaktowe", + "2": "Standardowe (brak osadzenia)", + "3": "Kompaktowe (brak osadzenia)", + "4": "pliki json" +} diff --git a/bot/pl/slash_commands/dashboard.json b/bot/pl/slash_commands/dashboard.json new file mode 100644 index 0000000..f84d0e4 --- /dev/null +++ b/bot/pl/slash_commands/dashboard.json @@ -0,0 +1,4 @@ +{ + "name": "dashboard", + "description": "Odwiedź panel zarządzania quark'a" +} diff --git a/bot/pl/slash_commands/initialReactor.json b/bot/pl/slash_commands/initialReactor.json new file mode 100644 index 0000000..6c85e0c --- /dev/null +++ b/bot/pl/slash_commands/initialReactor.json @@ -0,0 +1,3 @@ +{ + "name": "Zobacz pierwotnych reagujących" +} diff --git a/bot/pl/slash_commands/premium.json b/bot/pl/slash_commands/premium.json new file mode 100644 index 0000000..c3e2c8e --- /dev/null +++ b/bot/pl/slash_commands/premium.json @@ -0,0 +1,4 @@ +{ + "name": "premium", + "description": "Zdobądź informacje na temat subskrybcji premium quark'a" +} diff --git a/bot/pl/standard/channelEvents.json b/bot/pl/standard/channelEvents.json index 9df6eb9..30299d8 100644 --- a/bot/pl/standard/channelEvents.json +++ b/bot/pl/standard/channelEvents.json @@ -26,5 +26,37 @@ "description": "{executor} zaktualizował uprawnienia dla {channel} dla {special}", "newPermissions": "Nowe Uprawnienia", "viewFullNewPermissions": "Zobacz Pełne Nowe Uprawnienia" + }, + "webhookCreate": { + "title": "Integracja Utworzona", + "description": "{executor} utworzył Integracja {webhook} na kanale {channel}" + }, + "webhookDelete": { + "title": "Integracja Usunieta", + "description": "{executor} usuną integrację {webhook}" + }, + "webhookUpdate": { + "title": "Integracja Zmodyfikowana", + "description": "{executor} zmodyfikował integrację {webhook}" + }, + "webhookAvatarUpdate": { + "title": "Zaktualizowany Awatar Integracji", + "description": "{executor} zaktualizował awatar dla integracji {webhook}", + "description_added": "{executor} dodał awatar dla integracji {webhook}", + "description_removed": "{executor} usuną awatar dla integracji {webhook}", + "linkToOldAvatar": "Link do starego awataru", + "linkToNewAvatar": "Link do nowego awataru" + }, + "statusChannelFollowed": { + "title": "Obserwowany Kanał", + "description": "{executor} zaczą obserwować kanał {name} w {channel}" + }, + "statusChannelUnfollowed": { + "title": "Nieobserwowany Kanał", + "description": "{executor} przestał obserwować kanał {name}" + }, + "statusChannelUpdated": { + "title": "Aktualizacja Obserwowanego Kanału", + "description": "{executor} zaktualizował obserwowany kanał {name}" } } diff --git a/bot/pl/standard/generalEvents.json b/bot/pl/standard/generalEvents.json index 5241fc4..8773bc1 100644 --- a/bot/pl/standard/generalEvents.json +++ b/bot/pl/standard/generalEvents.json @@ -10,5 +10,21 @@ "description_removed": "{executor} usunął ikonę serwera", "linkToOldIcon": "Link do starej ikony", "linkToNewIcon": "Link do nowej ikony" + }, + "serverBoostAdd": { + "title": "Serwer Został Zboostowany!", + "description": "{user} zboostował serwer 🎉", + "description_noUser": "Ktoś zboostował serwer 🎉", + "description_withTier": "{user} zboostował serwer do tieru {tier} 🎉", + "description_withTier_noUser": "Ktoś zboostował serwer do tieru {tier} 🎉", + "none": "brak" + }, + "serverBoostRemove": { + "title": "Serwer Przestał Być Boostowany", + "description": "{user} przestał boostować ten serwer", + "description_noUser": "Ktoś przestał boostować ten serwer", + "description_withTier": "{user} przestał boostować, powodując spadek serwera do tieru {tier}", + "description_withTier_noUser": "Ktoś przestał boostować, powodując spadek serwera do tieru {tier}", + "none": "brak" } } diff --git a/bot/pl/standard/modlog.json b/bot/pl/standard/modlog.json index 3c98589..1e81d4c 100644 --- a/bot/pl/standard/modlog.json +++ b/bot/pl/standard/modlog.json @@ -14,5 +14,11 @@ "timeoutEnds": "Przerwa kończy się {time}", - "editReason": "Edytuj powód" -} \ No newline at end of file + "editReason": "Edytuj powód", + + "reasonModal": { + "label": "Powód", + "placeholder": "Bardzo złe zachowanie >:(", + "title": "Zmodyfikuj powód w modlogu" + } +} diff --git a/bot/pl/standard/quarkEvents.json b/bot/pl/standard/quarkEvents.json new file mode 100644 index 0000000..285710e --- /dev/null +++ b/bot/pl/standard/quarkEvents.json @@ -0,0 +1,64 @@ +{ + "serverlogChannelUpdate": { + "title": "Kanał logowania zmieniony", + "description_set": "{executor} ustawił kanał logowania dla typu {type} na {channel}", + "description_category_disable": "{executor} wyłączył kanał logowania dla typu {type}", + "description_unset": "{executor} usunął kanał logowania dla typu {type}" + }, + "serverlogOptionsUpdate": { + "title": "Opcje logowania zaktualizowane", + "description": "{executor} ustawił {option} na {state}", + "pluralkitSupport": "Wsparcie dla PluralKit", + "spoilers": "Spoilery", + "buttons": "Przyciski", + "formatType": "Typ formatu" + }, + "serverlogLogUpdate": { + "title": "Log zaktualizowany", + "description": "{executor} zaktualizował log typu {type}", + "enabled": "Włączone", + "logFormat": "Format", + "logChannel": "Kanał", + "colour": "Kolor", + "ignoreBotExecutors": "Ignoruj działania botów", + "ignoreBotTargets": "Ignoruj cele botów", + "activeIgnore": "Aktywne ignorowanie" + }, + "serverlogIgnoreUpdate": { + "title": "Opcje ignorowania zaktualizowane", + "description_set": "{executor} włączył {type}", + "description_unset": "{executor} wyłączył {type}", + "description_added": "{executor} dodał {target} do {type}", + "description_removed": "{executor} usunął {target} z {type}" + }, + "languageUpdate": { + "title": "Język zmieniony", + "description": "{executor} zmienił język na {language}" + }, + "reset": { + "title": "Konfiguracja zresetowana", + "description": "{executor} zresetował konfigurację tego serwera" + }, + "tagAdded": { + "title": "Tag dodany", + "description": "{executor} utworzył tag {tag}" + }, + "tagUpdated": { + "title": "Tag zaktualizowany", + "description": "{executor} zaktualizował tag {tag}" + }, + "tagDeleted": { + "title": "Tag usunięty", + "description": "{executor} usunął tag {tag}" + }, + "tokenAdded": { + "title": "Token wygenerowany", + "description": "{executor} wygenerował token dostępu quark'a z uprawnieniami {permissions} dla tego serwera", + "unique_id": "ID tokena", + "revoke": "Unieważnij ten token" + }, + "tokenRevoked": { + "title": "Token unieważniony", + "description": "{executor} unieważnił token dostępu quark'a o ID {token}" + } +} diff --git a/bot/pl/standard/serverActions.json b/bot/pl/standard/serverActions.json index 7116df1..51b5028 100644 --- a/bot/pl/standard/serverActions.json +++ b/bot/pl/standard/serverActions.json @@ -27,5 +27,26 @@ "emojiUpdated": { "title": "Edytowano emotkę", "description": "{emoji} została edytowana przez {executor}" + }, + "serverEventCreate": { + "title": "Wydarzenie Utworzone", + "description_withChannel": "{executor} utworzył wydarzenie {name} w kanale {channel}", + "description_withoutChannel": "{executor} utworzył wydarzenie {name}", + "eventDescription": "Opis", + "location": "Lokalizacja", + "starts": "Rozpoczęcie" + }, + "serverEventDelete": { + "title": "Wydarzenie Usunięte", + "description": "{executor} usuną wydarzenie {name}", + "linkToEventImage": "Link obrazu wydarzenia" + }, + "serverEventUpdate": { + "title": "Wydarzenie Zmodifikowane", + "description": "{executor} zmodyfikował wydarzenie {name}", + "newEventDescription": "Nowy Opis", + "newLocation": "Nowa Lokalizacja", + "newChannel": "Nowy Kanał", + "linkToEventImage": "Link do starego obrazu wydarzenia" } -} \ No newline at end of file +} diff --git a/bot/pl/standard/voiceEvents.json b/bot/pl/standard/voiceEvents.json index 0efd23d..6094587 100644 --- a/bot/pl/standard/voiceEvents.json +++ b/bot/pl/standard/voiceEvents.json @@ -66,6 +66,37 @@ "title": "Zaktualizowano Status Kanału Głosowego", "description": "{executor} ustawił status dla kanału {channel}", "status": "Status", - "linksToEmojis": "Linki do emotki" + "linksToEmojis": "Linki do emoji" + }, + "stageStarted": { + "title": "Rozpoczęto Scenę", + "description": "{executor} rozpoczął scenę w kanale {channel}", + "topic": "Temat" + }, + "stageEnded": { + "title": "Zakończono Scenę", + "description": "Scena w kanale {channel} została zakończona przez {executor}", + "description_noExecutor": "Scena w kanale {channel} została zakończona", + "topic": "Temat", + "none": "brak" + }, + "stageUpdated": { + "title": "Zaktualizowano Scenę", + "description": "Scena w kanale {channel} została zaktualizowana przez {executor}", + "oldTopic": "Stary Temat", + "newTopic": "Nowy Temat" + }, + "stageSpeakerAdd": { + "title": "Nowy Mówca na Scenie", + "description": "{user} został mówcą na kanale sceny {channel}", + "description_inviteAccepted": "{user} zaakceptował zaproszenie do zostania mówcą na kanale sceny {channel}" + }, + "stageSpeakerRemove": { + "title": "Zakończono Mówienie", + "description": "{user} nie jest już mówcą na kanale sceny {channel}" + }, + "stageSpeakerInvited": { + "title": "Zaproszono Mówcę", + "description": "{user} został zaproszony do mówienia na kanale sceny {channel}" } -} \ No newline at end of file +} diff --git a/bot/pl/time.json b/bot/pl/time.json new file mode 100644 index 0000000..f759066 --- /dev/null +++ b/bot/pl/time.json @@ -0,0 +1,16 @@ +{ + "second": "{time} sekunda", + "second-plural": "{time} sekundy", + "minute": "{time} minuta", + "minute-plural": "{time} minuty", + "hour": "{time} godzina", + "hour-plural": "{time} godziny", + "day": "{time} dzień", + "day-plural": "{time} dni", + "week": "{time} tydzień", + "week-plural": "{time} tygodnie", + "month": "{time} miesiąc", + "month-plural": "{time} miesiące", + "year": "{time} rok", + "year-plural": "{time} lata" +} diff --git a/index.js b/index.js index 808a358..8c40dd9 100644 --- a/index.js +++ b/index.js @@ -1,5 +1 @@ -const activate = require("./activate"); - -module.exports = { - activate -}; \ No newline at end of file +export { default as activate } from "./activate.js"; \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..05f6a46 --- /dev/null +++ b/package.json @@ -0,0 +1,20 @@ +{ + "name": "languages", + "version": "1.0.0", + "description": "Languages for Quark", + "main": "index.js", + "type": "module", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/quark-bot-discord/languages.git" + }, + "author": "Quark", + "license": "MIT", + "bugs": { + "url": "https://github.com/quark-bot-discord/languages/issues" + }, + "homepage": "https://github.com/quark-bot-discord/languages#readme" +}