├── .editorconfig ├── .github ├── CODEOWNERS ├── hooks │ ├── commit-msg │ └── pre-commit ├── problemMatchers │ ├── eslint.json │ └── tsc.json ├── renovate.json └── workflows │ ├── continuous-delivery.yml │ ├── continuous-integration.yml │ └── labelsync.yml ├── .gitignore ├── .vscode ├── extensions.json ├── launch.json └── settings.json ├── .yarn ├── plugins │ └── @yarnpkg │ │ └── plugin-git-hooks.cjs └── releases │ └── yarn-4.9.0.cjs ├── .yarnrc.yml ├── Dockerfile ├── LICENSE ├── README.md ├── crowdin.yml ├── package.json ├── prisma ├── migrations │ ├── 20220522151904_initial │ │ └── migration.sql │ ├── 20230310130831_02_add_cooldowns │ │ └── migration.sql │ └── migration_lock.toml └── schema.prisma ├── src ├── .env ├── commands │ ├── config.ts │ ├── post-guide.ts │ ├── resolve.ts │ └── suggest.ts ├── interaction-handlers │ ├── suggestions-create-modal.ts │ ├── suggestions-create.ts │ ├── suggestions-modal.ts │ └── suggestions.ts ├── lib │ ├── common │ │ ├── constants.ts │ │ ├── lazy.ts │ │ ├── tagged.ts │ │ └── types.ts │ ├── i18n │ │ ├── LanguageKeys.ts │ │ └── LanguageKeys │ │ │ ├── All.ts │ │ │ ├── Commands │ │ │ ├── All.ts │ │ │ ├── Config.ts │ │ │ ├── PostGuide.ts │ │ │ ├── Resolve.ts │ │ │ └── Suggest.ts │ │ │ ├── InteractionHandlers │ │ │ ├── All.ts │ │ │ ├── Suggestions.ts │ │ │ ├── SuggestionsCreate.ts │ │ │ └── SuggestionsModals.ts │ │ │ └── Shared │ │ │ └── All.ts │ ├── setup │ │ ├── all.ts │ │ ├── api.ts │ │ ├── logger.ts │ │ ├── prisma.ts │ │ └── redis.ts │ ├── structures │ │ └── TempCollection.ts │ ├── types │ │ ├── augments.d.ts │ │ └── discord.d.ts │ └── utilities │ │ ├── assertions.ts │ │ ├── command-permissions.ts │ │ ├── id-creator.ts │ │ ├── interactions.ts │ │ ├── message.ts │ │ ├── permissions.ts │ │ ├── result-utilities.ts │ │ ├── serialized-emoji.ts │ │ ├── suggestion-utilities.ts │ │ ├── time.ts │ │ └── user.ts ├── locales │ ├── bg │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── cs │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── da │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── de │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── el │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── en-GB │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── en-US │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── es-419 │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── es-ES │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── fi │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── fr │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── hi │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── hr │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── hu │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── id │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── it │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── ja │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── ko │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── lt │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── nl │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── no │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── pl │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── pt-BR │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── ro │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── ru │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── sv-SE │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── th │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── tr │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── uk │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── vi │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ ├── zh-CN │ │ ├── commands │ │ │ ├── config.json │ │ │ ├── post-guide.json │ │ │ ├── resolve.json │ │ │ ├── shared.json │ │ │ └── suggest.json │ │ ├── interaction-handlers │ │ │ ├── suggestions-create.json │ │ │ ├── suggestions-modals.json │ │ │ └── suggestions.json │ │ └── shared.json │ └── zh-TW │ │ ├── commands │ │ ├── config.json │ │ ├── post-guide.json │ │ ├── resolve.json │ │ ├── shared.json │ │ └── suggest.json │ │ ├── interaction-handlers │ │ ├── suggestions-create.json │ │ ├── suggestions-modals.json │ │ └── suggestions.json │ │ └── shared.json ├── main.ts └── tsconfig.json ├── tsconfig.base.json ├── tsconfig.eslint.json └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | insert_final_newline = true 7 | trim_trailing_whitespace = true 8 | 9 | [*.{js,ts}] 10 | indent_size = 4 11 | indent_style = tab 12 | block_comment_start = /* 13 | block_comment = * 14 | block_comment_end = */ 15 | 16 | [*.{yml,yaml}] 17 | indent_size = 2 18 | indent_style = space 19 | 20 | [*.{md,rmd,mkd,mkdn,mdwn,mdown,markdown,litcoffee}] 21 | tab_width = 4 22 | trim_trailing_whitespace = false 23 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # Kyra & Favna 2 | /src/ @favna @kyranet 3 | /tsconfig.base.json @favna @kyranet 4 | /tsconfig.eslint.json @favna @kyranet 5 | 6 | # Just Kyra 7 | /LICENSE @kyranet 8 | 9 | # Just Favna 10 | /.github/ @favna 11 | /.gitignore @favna 12 | -------------------------------------------------------------------------------- /.github/hooks/commit-msg: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | yarn commitlint --edit $1 4 | -------------------------------------------------------------------------------- /.github/hooks/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | yarn lint-staged 4 | -------------------------------------------------------------------------------- /.github/problemMatchers/eslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "problemMatcher": [ 3 | { 4 | "owner": "eslint-stylish", 5 | "pattern": [ 6 | { 7 | "regexp": "^([^\\s].*)$", 8 | "file": 1 9 | }, 10 | { 11 | "regexp": "^\\s+(\\d+):(\\d+)\\s+(error|warning|info)\\s+(.*)\\s\\s+(.*)$", 12 | "line": 1, 13 | "column": 2, 14 | "severity": 3, 15 | "message": 4, 16 | "code": 5, 17 | "loop": true 18 | } 19 | ] 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /.github/problemMatchers/tsc.json: -------------------------------------------------------------------------------- 1 | { 2 | "problemMatcher": [ 3 | { 4 | "owner": "tsc", 5 | "pattern": [ 6 | { 7 | "regexp": "^(?:\\s+\\d+\\>)?([^\\s].*)\\((\\d+|\\d+,\\d+|\\d+,\\d+,\\d+,\\d+)\\)\\s*:\\s+(error|warning|info)\\s+(\\w{1,2}\\d+)\\s*:\\s*(.*)$", 8 | "file": 1, 9 | "location": 2, 10 | "severity": 3, 11 | "code": 4, 12 | "message": 5 13 | } 14 | ] 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /.github/renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": ["github>sapphiredev/.github:sapphire-renovate"] 4 | } 5 | -------------------------------------------------------------------------------- /.github/workflows/continuous-delivery.yml: -------------------------------------------------------------------------------- 1 | name: Continuous Delivery 2 | 3 | on: 4 | workflow_dispatch: 5 | push: 6 | branches: 7 | - main 8 | paths: 9 | - 'src/**' 10 | - 'Dockerfile' 11 | - '.github/workflows/continuous-delivery.yml' 12 | - 'package.json' 13 | 14 | jobs: 15 | PublishIris: 16 | name: Publish Iris image to container registries 17 | runs-on: ubuntu-latest 18 | steps: 19 | - name: Checkout Project 20 | uses: actions/checkout@v4 21 | - name: Setup Docker Buildx 22 | uses: docker/setup-buildx-action@v3.10.0 23 | - name: Login to GitHub Container Registry 24 | uses: docker/login-action@v3.4.0 25 | with: 26 | registry: ghcr.io 27 | username: ${{ github.repository_owner }} 28 | password: ${{ secrets.GITHUB_TOKEN }} 29 | - name: Build and push Iris Docker image 30 | uses: docker/build-push-action@v6.15.0 31 | with: 32 | push: true 33 | context: . 34 | tags: ghcr.io/skyra-project/iriss:latest 35 | -------------------------------------------------------------------------------- /.github/workflows/continuous-integration.yml: -------------------------------------------------------------------------------- 1 | name: Continuous Integration 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | 9 | jobs: 10 | Linting: 11 | name: Linting NodeJS 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: Checkout Project 15 | uses: actions/checkout@v4 16 | - name: Add problem matchers 17 | run: echo "::add-matcher::.github/problemMatchers/eslint.json" 18 | - name: Use Node.js v22 19 | uses: actions/setup-node@v4 20 | with: 21 | node-version: 22 22 | cache: yarn 23 | - name: Install Dependencies 24 | run: yarn --immutable 25 | - name: Run ESLint 26 | run: yarn lint --fix=false 27 | 28 | Building: 29 | name: Building NodeJS 30 | runs-on: ubuntu-latest 31 | steps: 32 | - name: Checkout Project 33 | uses: actions/checkout@v4 34 | - name: Add problem matchers 35 | run: echo "::add-matcher::.github/problemMatchers/tsc.json" 36 | - name: Use Node.js v22 37 | uses: actions/setup-node@v4 38 | with: 39 | node-version: 22 40 | cache: yarn 41 | - name: Install Dependencies 42 | run: yarn --immutable 43 | - name: Generate Prisma 44 | run: yarn prisma:generate 45 | - name: Build code 46 | run: yarn build 47 | -------------------------------------------------------------------------------- /.github/workflows/labelsync.yml: -------------------------------------------------------------------------------- 1 | name: Automatic Label Sync 2 | 3 | on: 4 | schedule: 5 | - cron: '0 0 * * *' 6 | workflow_dispatch: 7 | 8 | jobs: 9 | label_sync: 10 | name: Automatic Label Synchronization 11 | runs-on: ubuntu-latest 12 | steps: 13 | - name: Checkout Project 14 | uses: actions/checkout@v4 15 | with: 16 | sparse-checkout: .github/labels.yml 17 | sparse-checkout-cone-mode: false 18 | repository: 'sapphiredev/.github' 19 | - name: Run Label Sync 20 | uses: crazy-max/ghaction-github-labeler@v5 21 | with: 22 | github-token: ${{ secrets.GITHUB_TOKEN }} 23 | yaml-file: .github/labels.yml 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore a blackhole and the folder for development 2 | node_modules/ 3 | .vs/ 4 | .idea/ 5 | *.iml 6 | 7 | # Yarn files 8 | .yarn/install-state.gz 9 | .yarn/build-state.yml 10 | 11 | # Output directories 12 | dist/ 13 | dist-tsc/ 14 | 15 | # Ignore heapsnapshot and log files 16 | *.heapsnapshot 17 | *.log 18 | 19 | # Ignore package locks 20 | package-lock.json 21 | 22 | # Environment variables 23 | .env.local 24 | .env.development.local 25 | .env.test.local 26 | .env.production.local 27 | /.env 28 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["bierner.github-markdown-preview", "dbaeumer.vscode-eslint", "esbenp.prettier-vscode"] 3 | } 4 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "configurations": [ 3 | { 4 | "type": "pwa-node", 5 | "request": "launch", 6 | "runtimeArgs": ["run-script", "start"], 7 | "name": "Debugger", 8 | "runtimeExecutable": "npm", 9 | "skipFiles": ["/**", "node_modules/tslib/**"], 10 | "internalConsoleOptions": "openOnSessionStart", 11 | "env": { 12 | "NODE_ENV": "development" 13 | }, 14 | "console": "internalConsole", 15 | "outputCapture": "std", 16 | "outFiles": ["${workspaceFolder}/dist/**/*.js"] 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "eslint.validate": ["typescript"], 3 | "editor.tabSize": 4, 4 | "editor.useTabStops": true, 5 | "editor.insertSpaces": false, 6 | "editor.detectIndentation": false, 7 | "files.eol": "\n", 8 | "typescript.tsdk": "node_modules\\typescript\\lib", 9 | "search.exclude": { 10 | "**/node_modules": true, 11 | "**/bower_components": true, 12 | "**/*.code-search": true, 13 | "**/.yarn": true, 14 | "**/dist/": true, 15 | "**/.git/": true 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | compressionLevel: mixed 2 | 3 | enableGlobalCache: true 4 | 5 | gitHooksPath: .github/hooks 6 | 7 | nodeLinker: node-modules 8 | 9 | plugins: 10 | - path: .yarn/plugins/@yarnpkg/plugin-git-hooks.cjs 11 | spec: 'https://raw.githubusercontent.com/trufflehq/yarn-plugin-git-hooks/main/bundles/%40yarnpkg/plugin-git-hooks.js' 12 | 13 | yarnPath: .yarn/releases/yarn-4.9.0.cjs 14 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # ================ # 2 | # Base Stage # 3 | # ================ # 4 | 5 | FROM node:22-alpine AS base 6 | 7 | WORKDIR /usr/src/app 8 | 9 | ENV YARN_DISABLE_GIT_HOOKS=1 10 | ENV CI=true 11 | ENV LOG_LEVEL=info 12 | ENV FORCE_COLOR=true 13 | 14 | RUN apk add --no-cache dumb-init 15 | 16 | COPY --chown=node:node yarn.lock . 17 | COPY --chown=node:node package.json . 18 | COPY --chown=node:node .yarnrc.yml . 19 | COPY --chown=node:node .yarn/ .yarn/ 20 | 21 | ENTRYPOINT ["dumb-init", "--"] 22 | 23 | # ================ # 24 | # Builder Stage # 25 | # ================ # 26 | 27 | FROM base AS builder 28 | 29 | ENV NODE_ENV="development" 30 | 31 | COPY --chown=node:node tsconfig.base.json . 32 | COPY --chown=node:node prisma/ prisma/ 33 | COPY --chown=node:node src/ src/ 34 | 35 | RUN yarn install --immutable \ 36 | && yarn run prisma:generate \ 37 | && yarn run build 38 | 39 | # ================ # 40 | # Runner Stage # 41 | # ================ # 42 | 43 | FROM base AS runner 44 | 45 | ENV NODE_ENV="production" 46 | ENV NODE_OPTIONS="--enable-source-maps" 47 | 48 | WORKDIR /usr/src/app 49 | 50 | COPY --chown=node:node --from=builder /usr/src/app/dist dist 51 | COPY --chown=node:node --from=builder /usr/src/app/src/locales src/locales 52 | COPY --chown=node:node --from=builder /usr/src/app/src/.env src/.env 53 | 54 | RUN yarn workspaces focus --all --production 55 | 56 | # Patch .prisma with the built files 57 | COPY --chown=node:node --from=builder /usr/src/app/node_modules/.prisma node_modules/.prisma 58 | 59 | USER node 60 | 61 | CMD [ "yarn", "run", "start" ] 62 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # iriss [![Crowdin](https://badges.crowdin.net/iriss/localized.svg)](https://crowdin.com/project/iriss) 2 | Your favourite Discord bot for feedback management, part of ArchId Network. 3 | -------------------------------------------------------------------------------- /crowdin.yml: -------------------------------------------------------------------------------- 1 | project_id: '519738' 2 | api_token_env: 'CROWDIN_PERSONAL_TOKEN' 3 | pull_request_title: 'chore(i18n-crowdin): new crowdin translation 🌐' 4 | commit_message: 'chore(i18n-crowdin): new translations for %original_file_name% (%language%)' 5 | append_commit_message: false 6 | 7 | files: 8 | - source: /src/locales/en-US/**/*.json 9 | translation: /src/locales/%locale%/**/%original_file_name% 10 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@skyra/iriss", 3 | "version": "1.0.0", 4 | "description": "Suggestion management bot for Discord", 5 | "author": "Skyra Project ", 6 | "license": "Apache-2.0", 7 | "private": true, 8 | "main": "dist/main.js", 9 | "type": "module", 10 | "imports": { 11 | "#lib/*": "./dist/lib/*.js" 12 | }, 13 | "scripts": { 14 | "build": "tsc -b src", 15 | "dev": "yarn build && yarn start", 16 | "watch": "tsc -b src -w", 17 | "prisma:generate": "yarn prisma generate", 18 | "start": "node --enable-source-maps dist/main.js", 19 | "test": "eslint --ext ts src", 20 | "lint": "eslint --fix --ext ts src", 21 | "format": "prettier --write --log-level=warn \"src/**/*.{js,ts,json}\"", 22 | "update": "yarn upgrade-interactive" 23 | }, 24 | "dependencies": { 25 | "@discordjs/builders": "^1.10.1", 26 | "@discordjs/collection": "^2.1.1", 27 | "@discordjs/core": "^2.0.1", 28 | "@prisma/client": "^6.6.0", 29 | "@sapphire/async-queue": "^1.5.5", 30 | "@sapphire/duration": "^1.2.0", 31 | "@sapphire/result": "^2.7.2", 32 | "@sapphire/utilities": "^3.18.2", 33 | "@skyra/env-utilities": "^2.0.0", 34 | "@skyra/http-framework": "^2.2.0", 35 | "@skyra/http-framework-i18n": "^1.2.0", 36 | "@skyra/logger": "^2.0.3", 37 | "@skyra/shared-http-pieces": "^1.2.2", 38 | "@skyra/start-banner": "^2.0.1", 39 | "discord-api-types": "^0.37.100", 40 | "gradient-string": "^3.0.0", 41 | "ioredis": "^5.6.1", 42 | "limax": "^4.1.0", 43 | "tslib": "^2.8.1" 44 | }, 45 | "devDependencies": { 46 | "@commitlint/cli": "^19.8.0", 47 | "@commitlint/config-conventional": "^19.8.0", 48 | "@sapphire/eslint-config": "^5.0.5", 49 | "@sapphire/prettier-config": "^2.0.0", 50 | "@sapphire/ts-config": "^5.0.1", 51 | "@types/gradient-string": "^1.1.6", 52 | "@types/node": "^22.14.1", 53 | "@typescript-eslint/eslint-plugin": "^7.13.1", 54 | "@typescript-eslint/parser": "^7.13.1", 55 | "cz-conventional-changelog": "^3.3.0", 56 | "eslint": "^8.57.1", 57 | "eslint-config-prettier": "^10.1.2", 58 | "eslint-plugin-prettier": "^5.2.6", 59 | "lint-staged": "^16.0.0", 60 | "prettier": "^3.5.3", 61 | "prisma": "^6.6.0", 62 | "typescript": "~5.4.5" 63 | }, 64 | "resolutions": { 65 | "ansi-regex": "^5.0.1", 66 | "discord-api-types": "^0.37.100", 67 | "minimist": "^1.2.8" 68 | }, 69 | "engines": { 70 | "node": ">=22.11.0" 71 | }, 72 | "commitlint": { 73 | "extends": [ 74 | "@commitlint/config-conventional" 75 | ] 76 | }, 77 | "lint-staged": { 78 | "*": "prettier --ignore-unknown --write", 79 | "*.{mjs,js,ts}": "eslint --fix --ext mjs,js,ts" 80 | }, 81 | "config": { 82 | "commitizen": { 83 | "path": "./node_modules/cz-conventional-changelog" 84 | } 85 | }, 86 | "prettier": "@sapphire/prettier-config", 87 | "eslintConfig": { 88 | "extends": "@sapphire", 89 | "rules": { 90 | "@typescript-eslint/no-base-to-string": "off" 91 | } 92 | }, 93 | "packageManager": "yarn@4.9.0", 94 | "volta": { 95 | "node": "22.14.0" 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /prisma/migrations/20220522151904_initial/migration.sql: -------------------------------------------------------------------------------- 1 | -- CreateTable 2 | CREATE TABLE "Guild" ( 3 | "id" BIGINT NOT NULL, 4 | "channel" BIGINT, 5 | "autoThread" BOOLEAN NOT NULL DEFAULT false, 6 | "buttons" BOOLEAN NOT NULL DEFAULT true, 7 | "compact" BOOLEAN NOT NULL DEFAULT false, 8 | "displayUpdateHistory" BOOLEAN NOT NULL DEFAULT false, 9 | "embed" BOOLEAN NOT NULL DEFAULT true, 10 | "reactions" TEXT[], 11 | "removeReactions" BOOLEAN NOT NULL DEFAULT false, 12 | 13 | CONSTRAINT "Guild_pkey" PRIMARY KEY ("id") 14 | ); 15 | 16 | -- CreateTable 17 | CREATE TABLE "Suggestion" ( 18 | "id" INTEGER NOT NULL, 19 | "guildId" BIGINT NOT NULL, 20 | "authorId" BIGINT NOT NULL, 21 | "messageId" BIGINT NOT NULL, 22 | "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, 23 | "repliedAt" TIMESTAMP(3), 24 | "archivedAt" TIMESTAMP(3), 25 | 26 | CONSTRAINT "Suggestion_pkey" PRIMARY KEY ("id","guildId") 27 | ); 28 | 29 | -- AddForeignKey 30 | ALTER TABLE "Suggestion" 31 | ADD CONSTRAINT "Suggestion_guildId_fkey" 32 | FOREIGN KEY ("guildId") 33 | REFERENCES "Guild"("id") 34 | ON DELETE RESTRICT 35 | ON UPDATE CASCADE; 36 | -------------------------------------------------------------------------------- /prisma/migrations/20230310130831_02_add_cooldowns/migration.sql: -------------------------------------------------------------------------------- 1 | -- AlterTable 2 | ALTER TABLE "Guild" ADD COLUMN "cooldown" INTEGER NOT NULL DEFAULT 0; 3 | -------------------------------------------------------------------------------- /prisma/migrations/migration_lock.toml: -------------------------------------------------------------------------------- 1 | # Please do not edit this file manually 2 | # It should be added in your version-control system (i.e. Git) 3 | provider = "postgresql" -------------------------------------------------------------------------------- /prisma/schema.prisma: -------------------------------------------------------------------------------- 1 | generator client { 2 | provider = "prisma-client-js" 3 | } 4 | 5 | datasource db { 6 | provider = "postgresql" 7 | url = env("DATABASE_URL") 8 | } 9 | 10 | model Guild { 11 | id BigInt @id 12 | /// The channel for suggestions 13 | channel BigInt? 14 | /// Whether or not to automatically create a thread. 15 | /// If set to true, the create thread button will not be added. 16 | autoThread Boolean @default(false) 17 | /// Whether or not to show management buttons. 18 | buttons Boolean @default(true) 19 | /// Whether or not to use compact mode. 20 | /// 21 | /// Compact suggestions have the following differences: 22 | /// - Swap the suggestion select menu to three buttons (one row versus two). 23 | compact Boolean @default(false) 24 | /// Whether or not updates should be appended. 25 | displayUpdateHistory Boolean @default(false) 26 | /// Whether or not the suggestions should be shown as an embed. 27 | embed Boolean @default(true) 28 | /// The reactions to use, if any. 29 | reactions String[] 30 | /// Whether or not reactions should be removed automatically on archive. 31 | removeReactions Boolean @default(false) 32 | /// The cooldown in milliseconds. 33 | cooldown Int @default(0) 34 | /// The suggestions available 35 | suggestions Suggestion[] 36 | } 37 | 38 | model Suggestion { 39 | id Int 40 | guild Guild @relation(fields: [guildId], references: [id]) 41 | guildId BigInt 42 | authorId BigInt 43 | messageId BigInt 44 | createdAt DateTime @default(now()) 45 | repliedAt DateTime? 46 | archivedAt DateTime? 47 | 48 | @@id([id, guildId]) 49 | } 50 | -------------------------------------------------------------------------------- /src/.env: -------------------------------------------------------------------------------- 1 | CLIENT_VERSION=1.0.0 2 | 3 | # Client ID which is used for the registry and various API calls 4 | DISCORD_CLIENT_ID= 5 | 6 | # Discord Client Public Key 7 | DISCORD_TOKEN= 8 | DISCORD_PUBLIC_KEY= 9 | 10 | REGISTRY_GUILD_ID= 11 | 12 | # Sentry 13 | SENTRY_DSN= 14 | 15 | # The address and port on which to start the HTTP server 16 | HTTP_ADDRESS=0.0.0.0 17 | HTTP_PORT=3000 18 | 19 | # The Redis server configuration 20 | REDIS_PORT=8287 21 | REDIS_PASSWORD=redis 22 | REDIS_HOST=localhost 23 | REDIS_DB=0 24 | 25 | DATABASE_URL="postgresql://user:password@localhost:5432/database?schema=public" 26 | -------------------------------------------------------------------------------- /src/commands/post-guide.ts: -------------------------------------------------------------------------------- 1 | import { BrandingColors } from '#lib/common/constants'; 2 | import { LanguageKeys } from '#lib/i18n/LanguageKeys'; 3 | import { getRegisteredCommand } from '#lib/utilities/command-permissions'; 4 | import { ActionRowBuilder, ButtonBuilder, EmbedBuilder, channelMention, chatInputApplicationCommandMention, userMention } from '@discordjs/builders'; 5 | import { isNullish } from '@sapphire/utilities'; 6 | import { envParseString } from '@skyra/env-utilities'; 7 | import { Command, RegisterCommand, type TransformedArguments } from '@skyra/http-framework'; 8 | import { applyLocalizedBuilder, getSupportedLanguageT, getSupportedUserLanguageT, resolveUserKey } from '@skyra/http-framework-i18n'; 9 | import { ButtonStyle, InteractionContextType, MessageFlags } from 'discord-api-types/v10'; 10 | 11 | const Root = LanguageKeys.Commands.PostGuide; 12 | 13 | @RegisterCommand((builder) => 14 | applyLocalizedBuilder(builder, Root.RootName, Root.RootDescription) 15 | .addBooleanOption((option) => applyLocalizedBuilder(option, Root.OptionsHide)) 16 | .addUserOption((option) => applyLocalizedBuilder(option, Root.OptionsTarget)) 17 | .setContexts(InteractionContextType.Guild) 18 | ) 19 | export class UserCommand extends Command { 20 | private suggestId: string | null = null; 21 | 22 | public override async chatInputRun(interaction: Command.ChatInputInteraction, options: Options) { 23 | const command = chatInputApplicationCommandMention('suggest', (this.suggestId ??= (await getRegisteredCommand('suggest')).id)); 24 | const hide = options.hide ?? isNullish(options.target); 25 | 26 | const settings = await this.container.prisma.guild.findFirst({ where: { id: BigInt(interaction.guildId!) }, select: { channel: true } }); 27 | if (!settings?.channel) { 28 | const content = resolveUserKey(interaction, LanguageKeys.Commands.Suggest.NewNotConfigured); 29 | return interaction.reply({ content, flags: MessageFlags.Ephemeral }); 30 | } 31 | 32 | const t = hide ? getSupportedUserLanguageT(interaction) : getSupportedLanguageT(interaction); 33 | const content = hide || !options.target ? undefined : userMention(options.target.user.id); 34 | const description = t(Root.Message, { 35 | command, 36 | channel: channelMention(settings.channel.toString()), 37 | bot: userMention(envParseString('DISCORD_CLIENT_ID')) 38 | }); 39 | const embed = new EmbedBuilder().setColor(BrandingColors.Primary).setDescription(description); 40 | const row = new ActionRowBuilder().addComponents( 41 | new ButtonBuilder().setCustomId('suggestions-create').setLabel(t(Root.ButtonSubmit)).setStyle(ButtonStyle.Primary), 42 | new ButtonBuilder().setURL('https://discord.gg/6gakFR2').setLabel(t(Root.ButtonSupport)).setStyle(ButtonStyle.Link) 43 | ); 44 | return interaction.reply({ content, embeds: [embed.toJSON()], components: [row.toJSON()], flags: hide ? MessageFlags.Ephemeral : undefined }); 45 | } 46 | } 47 | 48 | interface Options { 49 | hide?: boolean; 50 | target?: TransformedArguments.User; 51 | } 52 | -------------------------------------------------------------------------------- /src/interaction-handlers/suggestions-create-modal.ts: -------------------------------------------------------------------------------- 1 | import { LanguageKeys } from '#lib/i18n/LanguageKeys'; 2 | import { createSuggestion, getUserData } from '#lib/utilities/suggestion-utilities'; 3 | import { cutText, isNullishOrEmpty } from '@sapphire/utilities'; 4 | import { InteractionHandler } from '@skyra/http-framework'; 5 | import { resolveUserKey } from '@skyra/http-framework-i18n'; 6 | import { MessageFlags } from 'discord-api-types/v10'; 7 | 8 | export class Handler extends InteractionHandler { 9 | public run(interaction: InteractionHandler.ModalInteraction) { 10 | const input = interaction.data.components[0].components[0].value; 11 | if (isNullishOrEmpty(input)) { 12 | const content = resolveUserKey(interaction, LanguageKeys.Commands.Suggest.RePostNoContent); 13 | return interaction.reply({ content, flags: MessageFlags.Ephemeral }); 14 | } 15 | 16 | return createSuggestion(interaction, getUserData(interaction.user), cutText(input, 2048)); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/interaction-handlers/suggestions-create.ts: -------------------------------------------------------------------------------- 1 | import { LanguageKeys } from '#lib/i18n/LanguageKeys'; 2 | import { ActionRowBuilder, TextInputBuilder } from '@discordjs/builders'; 3 | import { InteractionHandler } from '@skyra/http-framework'; 4 | import { getSupportedUserLanguageT, resolveUserKey } from '@skyra/http-framework-i18n'; 5 | import { MessageFlags, TextInputStyle } from 'discord-api-types/v10'; 6 | 7 | export class UserHandler extends InteractionHandler { 8 | public async run(interaction: InteractionHandler.ButtonInteraction) { 9 | const settings = await this.container.prisma.guild.findFirst({ where: { id: BigInt(interaction.guildId!) }, select: { channel: true } }); 10 | if (!settings?.channel) { 11 | const content = resolveUserKey(interaction, LanguageKeys.Commands.Suggest.NewNotConfigured); 12 | return interaction.reply({ content, flags: MessageFlags.Ephemeral }); 13 | } 14 | 15 | const t = getSupportedUserLanguageT(interaction); 16 | const row = new ActionRowBuilder().addComponents( 17 | new TextInputBuilder() 18 | .setCustomId('content') 19 | .setStyle(TextInputStyle.Paragraph) 20 | .setLabel(t(LanguageKeys.InteractionHandlers.SuggestionsCreate.ModalLabel)) 21 | .setMaxLength(2048) 22 | .setRequired(true) 23 | ); 24 | return interaction.showModal({ 25 | custom_id: 'suggestions-create-modal', 26 | title: t(LanguageKeys.InteractionHandlers.SuggestionsCreate.ModalTitle), 27 | components: [row.toJSON()] 28 | }); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/interaction-handlers/suggestions-modal.ts: -------------------------------------------------------------------------------- 1 | import { LanguageKeys } from '#lib/i18n/LanguageKeys'; 2 | import type { Get, Id, Values } from '#lib/utilities/id-creator'; 3 | import { url } from '#lib/utilities/message'; 4 | import { useMessageUpdate } from '#lib/utilities/suggestion-utilities'; 5 | import { hyperlink, inlineCode } from '@discordjs/builders'; 6 | import { Result } from '@sapphire/result'; 7 | import { InteractionHandler } from '@skyra/http-framework'; 8 | import { resolveUserKey } from '@skyra/http-framework-i18n'; 9 | import { MessageFlags } from 'discord-api-types/v10'; 10 | 11 | type IdParserResult = Values>; 12 | 13 | export class Handler extends InteractionHandler { 14 | public async run(interaction: InteractionHandler.ModalInteraction, [action, idString]: IdParserResult) { 15 | const body = await useMessageUpdate(interaction, interaction.message!, action, interaction.data.components![0].components[0].value); 16 | await interaction.update(body); 17 | 18 | const guildId = BigInt(interaction.guild_id!); 19 | const result = await Result.fromAsync( 20 | this.container.prisma.suggestion.update({ 21 | where: { id_guildId: { guildId, id: Number(idString) } }, 22 | data: { repliedAt: new Date() }, 23 | select: null 24 | }) 25 | ); 26 | 27 | const id = hyperlink(inlineCode(`#${idString}`), url(guildId, interaction.message!.channel_id, interaction.message!.id)); 28 | const content = resolveUserKey( 29 | interaction, 30 | result.match({ 31 | ok: () => LanguageKeys.InteractionHandlers.SuggestionsModals.UpdateSuccess, 32 | err: () => LanguageKeys.InteractionHandlers.SuggestionsModals.UpdateFailure 33 | }), 34 | { id } 35 | ); 36 | 37 | return interaction.followup({ content, flags: MessageFlags.Ephemeral }); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/lib/common/constants.ts: -------------------------------------------------------------------------------- 1 | import type { APIAllowedMentions } from 'discord-api-types/v10'; 2 | 3 | export const enum BrandingColors { 4 | Primary = 0xddbd96, 5 | Secondary = 0xe25e59 6 | } 7 | 8 | export const enum SuggestionStatusColors { 9 | Unresolved = 0xeeeeee, 10 | Considered = 0xffd54f, 11 | Denied = 0xe91e63, 12 | Accepted = 0x8bc34a 13 | } 14 | 15 | export const EmptyMentions: APIAllowedMentions = { users: [], roles: [] }; 16 | -------------------------------------------------------------------------------- /src/lib/common/lazy.ts: -------------------------------------------------------------------------------- 1 | export function lazy(cb: () => T) { 2 | let defaultValue: T; 3 | 4 | return () => (defaultValue ??= cb()); 5 | } 6 | -------------------------------------------------------------------------------- /src/lib/common/tagged.ts: -------------------------------------------------------------------------------- 1 | export class Tagged { 2 | public readonly value: Value; 3 | public readonly tag: Tag; 4 | 5 | public constructor(value: Value, tag: Tag) { 6 | this.value = value; 7 | this.tag = tag; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/lib/common/types.ts: -------------------------------------------------------------------------------- 1 | export type IntegerString = `${bigint}`; 2 | -------------------------------------------------------------------------------- /src/lib/i18n/LanguageKeys.ts: -------------------------------------------------------------------------------- 1 | export * as LanguageKeys from '#lib/i18n/LanguageKeys/All'; 2 | -------------------------------------------------------------------------------- /src/lib/i18n/LanguageKeys/All.ts: -------------------------------------------------------------------------------- 1 | export * as Commands from '#lib/i18n/LanguageKeys/Commands/All'; 2 | export * as InteractionHandlers from '#lib/i18n/LanguageKeys/InteractionHandlers/All'; 3 | export * as Shared from '#lib/i18n/LanguageKeys/Shared/All'; 4 | -------------------------------------------------------------------------------- /src/lib/i18n/LanguageKeys/Commands/All.ts: -------------------------------------------------------------------------------- 1 | export * as Config from '#lib/i18n/LanguageKeys/Commands/Config'; 2 | export * as PostGuide from '#lib/i18n/LanguageKeys/Commands/PostGuide'; 3 | export * as Resolve from '#lib/i18n/LanguageKeys/Commands/Resolve'; 4 | export * as Suggest from '#lib/i18n/LanguageKeys/Commands/Suggest'; 5 | -------------------------------------------------------------------------------- /src/lib/i18n/LanguageKeys/Commands/Config.ts: -------------------------------------------------------------------------------- 1 | import { FT, T, type Value } from '@skyra/http-framework-i18n'; 2 | 3 | // Root 4 | export const RootName = T('commands/config:name'); 5 | export const RootDescription = T('commands/config:description'); 6 | 7 | export const View = 'commands/config:view'; 8 | export const ViewContent = FT<{ 9 | channel: string; 10 | autoThread: string; 11 | buttons: string; 12 | compact: string; 13 | cooldown: string; 14 | displayUpdateHistory: string; 15 | embed: string; 16 | reactions: string; 17 | }>('commands/config:viewContent'); 18 | 19 | export const Edit = 'commands/config:edit'; 20 | export const EditOptionsChannelDescription = T('commands/config:editOptionsChannelDescription'); 21 | export const EditOptionsAutoThreadDescription = T('commands/config:editOptionsAutoThreadDescription'); 22 | export const EditOptionsButtonsDescription = T('commands/config:editOptionsButtonsDescription'); 23 | export const EditOptionsCompactDescription = T('commands/config:editOptionsCompactDescription'); 24 | export const EditOptionsCooldownDescription = T('commands/config:editOptionsCooldownDescription'); 25 | export const EditOptionsDisplayUpdateHistoryDescription = T('commands/config:editOptionsDisplayUpdateHistoryDescription'); 26 | export const EditOptionsEmbedDescription = T('commands/config:editOptionsEmbedDescription'); 27 | export const EditOptionsReactionsDescription = T('commands/config:editOptionsReactionsDescription'); 28 | export const EditOptionsRemoveReactionsDescription = T('commands/config:editOptionsRemoveReactionsDescription'); 29 | export const EditReactionsInvalidAmount = T('commands/config:editReactionsInvalidAmount'); 30 | export const EditReactionsInvalidEmoji = FT('commands/config:editReactionsInvalidEmoji'); 31 | export const EditCooldownInvalidDuration = FT('commands/config:editCooldownInvalidDuration'); 32 | export const EditCooldownDurationTooShort = T('commands/config:editCooldownDurationTooShort'); 33 | export const EditCooldownDurationTooLong = T('commands/config:editCooldownDurationTooLong'); 34 | 35 | export const Reset = 'commands/config:reset'; 36 | export const ResetOptionsKey = 'commands/config:resetOptionsKey'; 37 | export const ResetOptionsKeyChoicesAll = T('commands/config:resetOptionsKeyChoicesAll'); 38 | 39 | export const KeyChannel = T('commands/config:keyChannel'); 40 | export const KeyAutoThread = T('commands/config:keyAutoThread'); 41 | export const KeyButtons = T('commands/config:keyButtons'); 42 | export const KeyCompact = T('commands/config:keyCompact'); 43 | export const KeyCooldown = T('commands/config:keyCooldown'); 44 | export const KeyDisplayUpdateHistory = T('commands/config:keyDisplayUpdateHistory'); 45 | export const KeyEmbed = T('commands/config:keyEmbed'); 46 | export const KeyReactions = T('commands/config:keyReactions'); 47 | export const KeyRemoveReactions = T('commands/config:keyRemoveReactions'); 48 | 49 | // Logic 50 | export const EditSuccess = T('commands/config:editSuccess'); 51 | export const EditFailure = T('commands/config:editFailure'); 52 | -------------------------------------------------------------------------------- /src/lib/i18n/LanguageKeys/Commands/PostGuide.ts: -------------------------------------------------------------------------------- 1 | import { FT, T } from '@skyra/http-framework-i18n'; 2 | 3 | // Root 4 | export const RootName = T('commands/post-guide:name'); 5 | export const RootDescription = T('commands/post-guide:description'); 6 | 7 | export const OptionsHide = 'commands/post-guide:optionsHide'; 8 | export const OptionsTarget = 'commands/post-guide:optionsTarget'; 9 | 10 | export const Message = FT<{ command: string; channel: string; bot: string }>('commands/post-guide:message'); 11 | export const ButtonSubmit = T('commands/post-guide:buttonSubmit'); 12 | export const ButtonSupport = T('commands/post-guide:buttonSupport'); 13 | -------------------------------------------------------------------------------- /src/lib/i18n/LanguageKeys/Commands/Resolve.ts: -------------------------------------------------------------------------------- 1 | import { FT, T } from '@skyra/http-framework-i18n'; 2 | 3 | export const RootName = T('commands/resolve:name'); 4 | export const RootDescription = T('commands/resolve:description'); 5 | export const Archive = 'commands/resolve:archive'; 6 | export const Accept = 'commands/resolve:accept'; 7 | export const Consider = 'commands/resolve:consider'; 8 | export const Deny = 'commands/resolve:deny'; 9 | export const OptionsId = 'commands/resolve:optionsId'; 10 | export const OptionsResponse = 'commands/resolve:optionsResponse'; 11 | export const NotConfigured = T('commands/resolve:notConfigured'); 12 | export const SuggestionArchived = T('commands/resolve:suggestionArchived'); 13 | export const SuggestionIdDoesNotExist = T('commands/resolve:suggestionIdDoesNotExist'); 14 | export const SuggestionMessageDeleted = T('commands/resolve:suggestionMessageDeleted'); 15 | export const ArchiveSuccess = FT<{ id: string }>('commands/resolve:archiveSuccess'); 16 | export const NoReason = T('commands/resolve:noReason'); 17 | export const Success = FT<{ id: string }>('commands/resolve:success'); 18 | export const Failure = FT<{ id: string }>('commands/resolve:failure'); 19 | -------------------------------------------------------------------------------- /src/lib/i18n/LanguageKeys/Commands/Suggest.ts: -------------------------------------------------------------------------------- 1 | import { FT, T } from '@skyra/http-framework-i18n'; 2 | 3 | export const RootName = T('commands/suggest:name'); 4 | export const RootDescription = T('commands/suggest:description'); 5 | export const PostAsSuggestionName = T('commands/suggest:postAsSuggestionName'); 6 | 7 | export const OptionsId = 'commands/suggest:optionsId'; 8 | export const OptionsSuggestion = 'commands/suggest:optionsSuggestion'; 9 | export const ComponentsAccept = T('commands/suggest:componentsAccept'); 10 | export const ComponentsArchive = T('commands/suggest:componentsArchive'); 11 | export const ComponentsConsider = T('commands/suggest:componentsConsider'); 12 | export const ComponentsCreateThread = T('commands/suggest:componentsCreateThread'); 13 | export const ComponentsDeny = T('commands/suggest:componentsDeny'); 14 | export const ModifyArchived = T('commands/suggest:modifyArchived'); 15 | export const ModifyDoesNotExist = T('commands/suggest:modifyDoesNotExist'); 16 | export const ModifyMessageDeleted = T('commands/suggest:modifyMessageDeleted'); 17 | export const ModifyMismatchingAuthor = T('commands/suggest:modifyMismatchingAuthor'); 18 | export const ModifyNotConfigured = T('commands/suggest:modifyNotConfigured'); 19 | export const ModifyReplied = T('commands/suggest:modifyReplied'); 20 | export const ModifySuccess = FT<{ id: number }>('commands/suggest:modifySuccess'); 21 | export const Cooldown = FT<{ time: string }>('commands/suggest:cooldown'); 22 | export const NewMessageContent = FT('commands/suggest:newMessageContent'); 23 | export const NewMessageEmbedTitle = FT('commands/suggest:newMessageEmbedTitle'); 24 | export const NewFailedToSend = FT<{ channel: string }>('commands/suggest:newFailedToSend'); 25 | export const NewNotConfigured = T('commands/suggest:newNotConfigured'); 26 | export const NewSuccess = FT<{ id: number }>('commands/suggest:newSuccess'); 27 | export const ReactionsFailed = FT<{ failed: string[] }>('commands/suggest:reactionsFailed'); 28 | export const ReactionsFailedAndRemoved = FT<{ failed: string[]; removed: string[] }>('commands/suggest:reactionsFailedAndRemoved'); 29 | export const RePostNoContent = T('commands/suggest:rePostNoContent'); 30 | 31 | export interface MessageData { 32 | id: number; 33 | timestamp: ``; 34 | user: { 35 | id: string; 36 | tag: string; 37 | mention: `<@${string}>`; 38 | avatar: string; 39 | }; 40 | message: string; 41 | } 42 | -------------------------------------------------------------------------------- /src/lib/i18n/LanguageKeys/InteractionHandlers/All.ts: -------------------------------------------------------------------------------- 1 | export * as Suggestions from '#lib/i18n/LanguageKeys/InteractionHandlers/Suggestions'; 2 | export * as SuggestionsCreate from '#lib/i18n/LanguageKeys/InteractionHandlers/SuggestionsCreate'; 3 | export * as SuggestionsModals from '#lib/i18n/LanguageKeys/InteractionHandlers/SuggestionsModals'; 4 | -------------------------------------------------------------------------------- /src/lib/i18n/LanguageKeys/InteractionHandlers/Suggestions.ts: -------------------------------------------------------------------------------- 1 | import { FT, T } from '@skyra/http-framework-i18n'; 2 | 3 | export const MissingResolvePermissions = T('interaction-handlers/suggestions:missingResolvePermissions'); 4 | export const ModalTitle = FT<{ id: string }>('interaction-handlers/suggestions:modalTitle'); 5 | export const ModalFieldLabelAccept = T('interaction-handlers/suggestions:modalFieldLabelAccept'); 6 | export const ModalFieldLabelConsider = T('interaction-handlers/suggestions:modalFieldLabelConsider'); 7 | export const ModalFieldLabelDeny = T('interaction-handlers/suggestions:modalFieldLabelDeny'); 8 | export const ModalFieldPlaceholderAccept = T('interaction-handlers/suggestions:modalFieldPlaceholderAccept'); 9 | export const ModalFieldPlaceholderConsider = T('interaction-handlers/suggestions:modalFieldPlaceholderConsider'); 10 | export const ModalFieldPlaceholderDeny = T('interaction-handlers/suggestions:modalFieldPlaceholderDeny'); 11 | export const ArchiveSuccess = T('interaction-handlers/suggestions:archiveSuccess'); 12 | export const ArchiveThreadFailure = T('interaction-handlers/suggestions:archiveThreadFailure'); 13 | export const ReactionRemovalFailure = T('interaction-handlers/suggestions:reactionRemovalFailure'); 14 | export const ArchiveMessageFailure = T('interaction-handlers/suggestions:archiveMessageFailure'); 15 | export const ThreadChannelCreationFailure = T('interaction-handlers/suggestions:threadChannelCreationFailure'); 16 | export const ThreadMessageUpdateSuccess = FT<{ channel: string }>('interaction-handlers/suggestions:threadMessageUpdateSuccess'); 17 | export const ThreadMessageUpdateFailure = FT<{ channel: string }>('interaction-handlers/suggestions:threadMessageUpdateFailure'); 18 | export const ThreadMemberAddFailure = T('interaction-handlers/suggestions:threadMemberAddFailure'); 19 | -------------------------------------------------------------------------------- /src/lib/i18n/LanguageKeys/InteractionHandlers/SuggestionsCreate.ts: -------------------------------------------------------------------------------- 1 | import { T } from '@skyra/http-framework-i18n'; 2 | 3 | export const ModalTitle = T('interaction-handlers/suggestions-create:modalTitle'); 4 | export const ModalLabel = T('interaction-handlers/suggestions-create:modalLabel'); 5 | -------------------------------------------------------------------------------- /src/lib/i18n/LanguageKeys/InteractionHandlers/SuggestionsModals.ts: -------------------------------------------------------------------------------- 1 | import { FT } from '@skyra/http-framework-i18n'; 2 | 3 | export const ContentAccepted = FT<{ tag: string; time: string }>('interaction-handlers/suggestions-modals:contentAccepted'); 4 | export const ContentConsidered = FT<{ tag: string; time: string }>('interaction-handlers/suggestions-modals:contentConsidered'); 5 | export const ContentDenied = FT<{ tag: string; time: string }>('interaction-handlers/suggestions-modals:contentDenied'); 6 | export const UpdateFailure = FT<{ id: string }>('interaction-handlers/suggestions-modals:updateFailure'); 7 | export const UpdateSuccess = FT<{ id: string }>('interaction-handlers/suggestions-modals:updateSuccess'); 8 | -------------------------------------------------------------------------------- /src/lib/i18n/LanguageKeys/Shared/All.ts: -------------------------------------------------------------------------------- 1 | import { T } from '@skyra/http-framework-i18n'; 2 | 3 | export const Enabled = T('shared:enabled'); 4 | export const Disabled = T('shared:disabled'); 5 | export const Unset = T('shared:unset'); 6 | export const None = T('shared:none'); 7 | -------------------------------------------------------------------------------- /src/lib/setup/all.ts: -------------------------------------------------------------------------------- 1 | import { run as redisRun } from '#lib/setup/redis'; 2 | import { setup as envRun } from '@skyra/env-utilities'; 3 | import { initializeSentry, setInvite, setRepository } from '@skyra/shared-http-pieces'; 4 | 5 | import '#lib/setup/logger'; 6 | import '#lib/setup/prisma'; 7 | import '@skyra/shared-http-pieces/register'; 8 | 9 | export function setup() { 10 | envRun(new URL('../../../src/.env', import.meta.url)); 11 | 12 | setRepository('iriss'); 13 | setInvite('948377113457745990', '326417868864'); 14 | initializeSentry(); 15 | 16 | redisRun(); 17 | } 18 | -------------------------------------------------------------------------------- /src/lib/setup/api.ts: -------------------------------------------------------------------------------- 1 | import { API } from '@discordjs/core/http-only'; 2 | import { container } from '@skyra/http-framework'; 3 | 4 | export function setupAPI() { 5 | container.api = new API(container.rest); 6 | } 7 | 8 | declare module '@sapphire/pieces' { 9 | interface Container { 10 | api: API; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/lib/setup/logger.ts: -------------------------------------------------------------------------------- 1 | import { container } from '@skyra/http-framework'; 2 | import { Logger } from '@skyra/logger'; 3 | 4 | container.logger = new Logger(); 5 | 6 | declare module '@sapphire/pieces' { 7 | interface Container { 8 | logger: Logger; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/lib/setup/prisma.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient } from '@prisma/client'; 2 | import { container } from '@skyra/http-framework'; 3 | 4 | const prisma = new PrismaClient(); 5 | container.prisma = prisma; 6 | 7 | declare module '@sapphire/pieces' { 8 | interface Container { 9 | prisma: typeof prisma; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/lib/setup/redis.ts: -------------------------------------------------------------------------------- 1 | import { envParseInteger, envParseString } from '@skyra/env-utilities'; 2 | import { container } from '@skyra/http-framework'; 3 | import { Redis } from 'ioredis'; 4 | 5 | export function run() { 6 | container.redis = new Redis({ 7 | port: envParseInteger('REDIS_PORT'), 8 | password: envParseString('REDIS_PASSWORD'), 9 | host: envParseString('REDIS_HOST'), 10 | db: envParseInteger('REDIS_DB') 11 | }); 12 | } 13 | 14 | declare module '@sapphire/pieces' { 15 | interface Container { 16 | redis: Redis; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/lib/structures/TempCollection.ts: -------------------------------------------------------------------------------- 1 | import { Collection } from '@discordjs/collection'; 2 | import { clearInterval, setInterval } from 'node:timers'; 3 | 4 | export class TempCollection { 5 | public readonly maxAge: number; 6 | public readonly sweepInterval: number; 7 | private timer: NodeJS.Timeout | null = null; 8 | private readonly entries = new Collection(); 9 | 10 | public constructor(maxAge: number, sweepInterval: number) { 11 | this.maxAge = maxAge; 12 | this.sweepInterval = sweepInterval; 13 | } 14 | 15 | public get empty(): boolean { 16 | return this.entries.size === 0; 17 | } 18 | 19 | public get(key: K): V | undefined { 20 | const entry = this.entries.get(key); 21 | 22 | // If the entry exists... 23 | if (entry) { 24 | // ... and has not expired, return its value: 25 | if (entry.expiresAt > Date.now()) return entry.value; 26 | 27 | // Otherwise delete it and fallback to returning undefined: 28 | this.delete(key); 29 | } 30 | 31 | return undefined; 32 | } 33 | 34 | public ensure(key: K, cb: (key: K) => V): V { 35 | const existing = this.get(key); 36 | if (existing) return existing; 37 | 38 | return this.set(key, cb(key)); 39 | } 40 | 41 | public async ensureAsync(key: K, cb: (key: K) => PromiseLike): Promise { 42 | const existing = this.get(key); 43 | if (existing) return existing; 44 | 45 | return this.set(key, await cb(key)); 46 | } 47 | 48 | public set(key: K, value: V) { 49 | this.entries.set(key, { expiresAt: Date.now(), value }); 50 | this.start(); 51 | return value; 52 | } 53 | 54 | public delete(key: K) { 55 | if (this.entries.delete(key) && this.empty) { 56 | this.stop(); 57 | return true; 58 | } 59 | 60 | return false; 61 | } 62 | 63 | private start() { 64 | if (this.timer) return false; 65 | 66 | this.timer = setInterval(() => { 67 | const now = Date.now(); 68 | this.entries.sweep((value) => value.expiresAt <= now); 69 | 70 | if (this.empty) this.stop(); 71 | }, this.sweepInterval); 72 | return true; 73 | } 74 | 75 | private stop() { 76 | if (!this.timer) return false; 77 | 78 | clearInterval(this.timer); 79 | this.timer = null; 80 | return true; 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /src/lib/types/augments.d.ts: -------------------------------------------------------------------------------- 1 | import type { IntegerString } from '@skyra/env-utilities'; 2 | 3 | declare module '@skyra/env-utilities' { 4 | interface Env { 5 | CLIENT_VERSION: string; 6 | 7 | DISCORD_CLIENT_ID: string; 8 | DISCORD_TOKEN: string; 9 | DISCORD_PUBLIC_KEY: string; 10 | 11 | REDIS_PORT: IntegerString; 12 | REDIS_PASSWORD: string; 13 | REDIS_HOST: string; 14 | REDIS_DB: IntegerString; 15 | 16 | HTTP_ADDRESS: string; 17 | HTTP_PORT: IntegerString; 18 | 19 | REGISTRY_GUILD_ID: string; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/lib/types/discord.d.ts: -------------------------------------------------------------------------------- 1 | export type Snowflake = string | bigint; 2 | -------------------------------------------------------------------------------- /src/lib/utilities/assertions.ts: -------------------------------------------------------------------------------- 1 | export function ensure(value: T | null | undefined): T { 2 | if (value === undefined || value === null) throw new TypeError('Expected value to be defined'); 3 | return value; 4 | } 5 | -------------------------------------------------------------------------------- /src/lib/utilities/id-creator.ts: -------------------------------------------------------------------------------- 1 | import { SuggestionStatusColors } from '#lib/common/constants'; 2 | import type { IntegerString } from '#lib/common/types'; 3 | 4 | export const enum Id { 5 | Suggestions = 'suggestions', 6 | SuggestionsModal = 'suggestions-modal', 7 | SuggestionsModalField = 'suggestions-modal.field' 8 | } 9 | 10 | export function makeIntegerString(value: number | bigint): IntegerString { 11 | return value.toString() as IntegerString; 12 | } 13 | 14 | export type CustomIdEntries = 15 | | [name: Id.Suggestions, action: 'archive' | 'thread' | 'resolve', id: IntegerString, status?: Status] // 16 | | [name: Id.SuggestionsModal, status: Status, id: IntegerString]; 17 | 18 | export type Get = Extract; 19 | export type Key = E[0]; 20 | export type Values = E extends [key: any, ...tail: infer Tail] ? Tail : never; 21 | 22 | export function makeCustomId(key: Key, ...values: Values) { 23 | // return values.length === 0 ? key : `${key}.${values.join('.')}`; 24 | return `${key}.${values.join('.')}`; 25 | } 26 | 27 | export const enum Status { 28 | Accept = 'accept', 29 | Consider = 'consider', 30 | Deny = 'deny' 31 | } 32 | 33 | export function getColor(action: Status) { 34 | switch (action) { 35 | case Status.Accept: 36 | return SuggestionStatusColors.Accepted; 37 | case Status.Consider: 38 | return SuggestionStatusColors.Considered; 39 | case Status.Deny: 40 | return SuggestionStatusColors.Denied; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/lib/utilities/interactions.ts: -------------------------------------------------------------------------------- 1 | import { ensure } from '#lib/utilities/assertions'; 2 | import type { Interactions } from '@skyra/http-framework'; 3 | import type { APIMessage } from 'discord-api-types/v10'; 4 | 5 | export function getGuildId(interaction: Interactions.Any): string { 6 | return ensure(interaction.guild_id); 7 | } 8 | 9 | export function getMessage(interaction: Interactions.Any): APIMessage | null { 10 | return 'message' in interaction ? (interaction.message ?? null) : null; 11 | } 12 | -------------------------------------------------------------------------------- /src/lib/utilities/message.ts: -------------------------------------------------------------------------------- 1 | import type { Snowflake } from '#lib/types/discord.d.ts'; 2 | 3 | export function url(guildId: Snowflake | '@me', channelId: Snowflake, messageId: Snowflake) { 4 | return `https://discord.com/channels/${guildId.toString()}/${channelId.toString()}/${messageId.toString()}` as const; 5 | } 6 | -------------------------------------------------------------------------------- /src/lib/utilities/permissions.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Checks whether or not {@param permissions} includes all the bits from {@param mask}. 3 | * @param permissions The permissions to check. 4 | * @param mask The mask of permissions required for the function to return true. 5 | * @returns Whether or not the permissions includes all values from the mask. 6 | * @example 7 | * // Checking one permission: 8 | * has(interaction.member!.permissions, PermissionFlagsBits.KickMembers); 9 | */ 10 | export function has(permissions: string | bigint, mask: bigint) { 11 | return (BigInt(permissions) & mask) === mask; 12 | } 13 | -------------------------------------------------------------------------------- /src/lib/utilities/result-utilities.ts: -------------------------------------------------------------------------------- 1 | import { Tagged } from '#lib/common/tagged'; 2 | import { DiscordAPIError } from '@discordjs/rest'; 3 | import { Option, Result } from '@sapphire/result'; 4 | import { RESTJSONErrorCodes } from 'discord-api-types/v10'; 5 | 6 | export const ErrorCodes = RESTJSONErrorCodes; 7 | export type ErrorCode = RESTJSONErrorCodes; 8 | 9 | export function isDiscordAPIError(value: unknown): value is DiscordAPIError & { code: number } { 10 | return value instanceof DiscordAPIError && typeof value.code === 'number'; 11 | } 12 | 13 | export type FromDiscordResultValue = Option; 14 | export type FromDiscordResultError = Tagged>; 15 | export type FromDiscordResult = Result< 16 | FromDiscordResultValue, 17 | FromDiscordResultError 18 | >; 19 | 20 | export async function fromDiscord( 21 | promise: Promise, 22 | options: FromOptions 23 | ): Promise> { 24 | const result = await Result.fromAsync(promise); 25 | 26 | return result.match({ 27 | ok: (value) => Result.ok(Option.some(value)), 28 | err: (error) => { 29 | if (isDiscordAPIError(error)) { 30 | if (options.ok?.includes(error.code)) return Result.ok(Option.none); 31 | if (options.err?.includes(error.code)) return Result.err(new Tagged(error, Option.some(error.code as VErr[number]))); 32 | } 33 | 34 | return Result.err(new Tagged(error as Error, Option.none)); 35 | } 36 | }); 37 | } 38 | 39 | export interface FromOptions { 40 | readonly ok?: VOk; 41 | readonly err?: VErr; 42 | } 43 | -------------------------------------------------------------------------------- /src/lib/utilities/serialized-emoji.ts: -------------------------------------------------------------------------------- 1 | import type { IntegerString } from '#lib/common/types'; 2 | 3 | export type SerializedTwemoji = `t${string}`; 4 | export type SerializedCustomAnimatedEmoji = `a${string}.${IntegerString}`; 5 | export type SerializedCustomStaticEmoji = `s${string}.${IntegerString}`; 6 | export type SerializedCustomEmoji = SerializedCustomAnimatedEmoji | SerializedCustomStaticEmoji; 7 | export type SerializedEmoji = SerializedTwemoji | SerializedCustomEmoji; 8 | 9 | export function isTwemoji(emoji: SerializedEmoji): emoji is SerializedTwemoji { 10 | return emoji.startsWith('t'); 11 | } 12 | 13 | export function isAnimated(emoji: SerializedEmoji): emoji is SerializedCustomAnimatedEmoji { 14 | return emoji.startsWith('a'); 15 | } 16 | 17 | export function isCustom(emoji: SerializedEmoji): emoji is SerializedCustomEmoji { 18 | return !isCustom(emoji); 19 | } 20 | 21 | export function getId(emoji: SerializedEmoji): string { 22 | if (isTwemoji(emoji)) return emoji.slice(1); 23 | 24 | const index = emoji.lastIndexOf('.'); 25 | if (index === -1) throw new Error(`Invalid SerializedEmoji '${emoji}'`); 26 | return emoji.slice(index + 1); 27 | } 28 | 29 | export function getTextFormat(emoji: SerializedEmoji) { 30 | if (isTwemoji(emoji)) return emoji.slice(1); 31 | 32 | const index = emoji.lastIndexOf('.'); 33 | if (index === -1) throw new Error(`Invalid SerializedEmoji '${emoji}'`); 34 | 35 | const name = emoji.slice(1, index); 36 | const id = emoji.slice(index + 1); 37 | const animated = isAnimated(emoji) ? 'a' : ''; 38 | return `<${animated}:${name}:${id}>`; 39 | } 40 | 41 | export function getReactionFormat(emoji: SerializedEmoji) { 42 | if (isTwemoji(emoji)) return emoji.slice(1); 43 | 44 | const index = emoji.lastIndexOf('.'); 45 | if (index === -1) throw new Error(`Invalid SerializedEmoji '${emoji}'`); 46 | 47 | const name = emoji.slice(1, index); 48 | const id = emoji.slice(index + 1); 49 | return `${name}:${id}`; 50 | } 51 | 52 | // Twemoji keycaps and Unicode emojis: 53 | const twemoji = /^(?:\d\ufe0f?\u20e3|\p{Emoji_Presentation})$/u; 54 | const customEmoji = /<(?a)?:(?[a-zA-Z0-9_]{2,32}):(?\d{17,19})>/; 55 | export function parse(emoji: string): SerializedEmoji | null { 56 | if (twemoji.test(emoji)) return `t${emoji}`; 57 | 58 | const result = customEmoji.exec(emoji); 59 | return result === null ? null : `${result.groups!.animated ? 'a' : 's'}${result.groups!.name}.${result.groups!.id as IntegerString}`; 60 | } 61 | -------------------------------------------------------------------------------- /src/lib/utilities/time.ts: -------------------------------------------------------------------------------- 1 | export function millisecondsToSeconds(milliseconds: number) { 2 | return Math.round(milliseconds / 1000); 3 | } 4 | -------------------------------------------------------------------------------- /src/lib/utilities/user.ts: -------------------------------------------------------------------------------- 1 | import type { ImageURLOptions } from '@discordjs/rest'; 2 | import { isNullishOrEmpty } from '@sapphire/utilities'; 3 | import { container } from '@skyra/http-framework'; 4 | import type { APIUser } from 'discord-api-types/v10'; 5 | 6 | /** 7 | * Checks whether or not the user uses the new username change, defined by the 8 | * `discriminator` being `'0'` or in the future, no discriminator at all. 9 | * @see {@link https://dis.gd/usernames} 10 | * @param user The user to check. 11 | */ 12 | export function usesPomelo(user: APIUser) { 13 | return isNullishOrEmpty(user.discriminator) || user.discriminator === '0'; 14 | } 15 | 16 | export function getDisplayAvatar(user: APIUser, options: ImageURLOptions = {}) { 17 | if (user.avatar === null) { 18 | const id = usesPomelo(user) ? Number(BigInt(user.id) >> 22n) % 6 : Number(user.discriminator) % 5; 19 | return container.rest.cdn.defaultAvatar(id); 20 | } 21 | 22 | return container.rest.cdn.avatar(user.id, user.avatar, options); 23 | } 24 | 25 | export function getTag(user: APIUser) { 26 | return usesPomelo(user) ? `@${user.username}` : `${user.username}#${user.discriminator}`; 27 | } 28 | -------------------------------------------------------------------------------- /src/locales/bg/commands/config.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/bg/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/bg/commands/resolve.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/bg/commands/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/bg/commands/suggest.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/bg/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/bg/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/bg/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/bg/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/cs/commands/config.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/cs/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/cs/commands/resolve.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/cs/commands/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/cs/commands/suggest.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/cs/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/cs/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/cs/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/cs/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/da/commands/config.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/da/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/da/commands/resolve.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/da/commands/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/da/commands/suggest.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/da/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/da/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/da/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/da/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/de/commands/config.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/de/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/de/commands/resolve.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/de/commands/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/de/commands/suggest.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/de/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/de/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/de/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/de/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/el/commands/config.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/el/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/el/commands/resolve.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/el/commands/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/el/commands/suggest.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/el/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/el/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/el/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/el/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/en-GB/commands/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "config", 3 | "description": "Manage the configuration for this server", 4 | "viewName": "view", 5 | "viewDescription": "View the current configuration", 6 | "viewContent": "**Current settings**:\n\nChannel: {{channel}}\nAuto-thread: {{autoThread}}\nButtons: {{buttons}}\nCompact: {{compact}}\nCooldown: {{cooldown}}\nDisplay Update History: {{displayUpdateHistory}}\nEmbed: {{embed}}\nReactions: {{reactions}}\n\n> **Note**: To update them, you can use `/config edit`.", 7 | "editName": "edit", 8 | "editDescription": "Edit a configuration value", 9 | "editOptionsChannelDescription": "If set, the channel to post new suggestions at", 10 | "editOptionsAutoThreadDescription": "Whether to automatically create a thread channel on new suggestion messages (default: False)", 11 | "editOptionsButtonsDescription": "Whether to add management buttons on new suggestion messages (default: True)", 12 | "editOptionsCompactDescription": "Whether to use compact mode on new suggestion messages (default: False)", 13 | "editOptionsCooldownDescription": "If set, the cooldown period for users before they can post another suggestion (default: None)", 14 | "editOptionsDisplayUpdateHistoryDescription": "Whether to display up to the 3 last responses on suggestions (default: False)", 15 | "editOptionsEmbedDescription": "Whether to use embeds on new suggestion messages (default: True)", 16 | "editOptionsReactionsDescription": "If set, the reactions to use on new suggestion messages, up to 3, separated by a space", 17 | "editOptionsRemoveReactionsDescription": "Whether to automatically remove all reactions from suggestion messages on archival (default: False)", 18 | "editReactionsInvalidAmount": "I appreciate your enthusiasm, but I cannot afford to add more than 3 reactions, so please keep it to a maximum of 3 emojis, sorry!", 19 | "editReactionsInvalidEmoji": "I could not parse {{value}} to a valid emoji, please try again with another one. Sorry for the inconvenience 😦", 20 | "editCooldownInvalidDuration": "I could not validate a duration from {{value}}, please try using words such as `2h`.", 21 | "editCooldownDurationTooShort": "The cooldown cannot be shorter than 1 second.", 22 | "editCooldownDurationTooLong": "The cooldown cannot be longer than 6 hours.", 23 | "resetName": "reset", 24 | "resetDescription": "Reset a configuration option to its default setting", 25 | "resetOptionsKeyName": "key", 26 | "resetOptionsKeyDescription": "The option to reset", 27 | "resetOptionsKeyChoicesAll": "all", 28 | "keyChannel": "channel", 29 | "keyAutoThread": "auto-thread", 30 | "keyButtons": "buttons", 31 | "keyCompact": "compact", 32 | "keyCooldown": "cooldown", 33 | "keyDisplayUpdateHistory": "display-update-history", 34 | "keyEmbed": "embed", 35 | "keyReactions": "reactions", 36 | "keyRemoveReactions": "remove-reactions", 37 | "editSuccess": "Successfully edited the configuration for this server.", 38 | "editFailure": "I wasn't able to save your changes, sorry 😦" 39 | } 40 | -------------------------------------------------------------------------------- /src/locales/en-GB/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "post-guide", 3 | "description": "Posts a guide on how to publish new suggestions", 4 | "optionsHideName": "hide", 5 | "optionsHideDescription": "Whether or not the guide should be hidden", 6 | "optionsTargetName": "target", 7 | "optionsTargetDescription": "The user to mention in the message, if any", 8 | "message": "To submit a new suggestion, simply use the {{command}} command with {{bot}}, or click the \"Submit a Suggestion\" button attached.\n\nYour message will be posted in {{channel}}.", 9 | "buttonSubmit": "Submit a Suggestion", 10 | "buttonSupport": "Support Server" 11 | } 12 | -------------------------------------------------------------------------------- /src/locales/en-GB/commands/resolve.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "resolve", 3 | "description": "Resolves the suggestions from this server", 4 | "archiveName": "archive", 5 | "archiveDescription": "Archive a suggestion from this server", 6 | "acceptName": "accept", 7 | "acceptDescription": "Mark a suggestion from this server as accepted", 8 | "considerName": "consider", 9 | "considerDescription": "Mark a suggestion from this server as considered", 10 | "denyName": "deny", 11 | "denyDescription": "Mark a suggestion from this server as denied", 12 | "optionsIdName": "id", 13 | "optionsIdDescription": "The ID of the suggestion to update", 14 | "optionsResponseName": "response", 15 | "optionsResponseDescription": "The response to be added to the suggestion message", 16 | "notConfigured": "This server does not have a suggestions channel configured, please configure it with `/config edit channel #channel` or ask an administrator to do it.", 17 | "suggestionArchived": "The suggestion is archived and cannot be edited.", 18 | "suggestionIdDoesNotExist": "The suggestion ID you specified does not exist.", 19 | "suggestionMessageDeleted": "The suggestion's message has been deleted, and therefore, it has been automatically archived.", 20 | "archiveSuccess": "Successfully archived the suggestion {{id}}.", 21 | "noReason": "*No reason specified*", 22 | "success": "Successfully updated the suggestion {{id}}.", 23 | "failure": "I wasn't able to update the suggestion {{id}}, sorry!" 24 | } 25 | -------------------------------------------------------------------------------- /src/locales/en-GB/commands/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "infoEmbedDescription": "Iriss is a bot focused on suggestion management. This is an HTTP only bot built on top of [Skyra HTTP Framework](https://www.npmjs.com/package/@skyra/http-framework)." 3 | } 4 | -------------------------------------------------------------------------------- /src/locales/en-GB/commands/suggest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "suggest", 3 | "description": "Create a new suggestion for this server", 4 | "postAsSuggestionName": "Post as Suggestion", 5 | "componentsAccept": "Accept", 6 | "componentsArchive": "Archive", 7 | "componentsConsider": "Consider", 8 | "componentsCreateThread": "Create Thread", 9 | "componentsDeny": "Deny", 10 | "modifyArchived": "You cannot modify a suggestion that is archived. You may reference it with a new suggestion.", 11 | "modifyDoesNotExist": "The suggestion you specified does not exist.", 12 | "modifyMessageDeleted": "It seems the suggestion you are trying to edit was deleted, and as such, automatically archived. Sorry!", 13 | "modifyMismatchingAuthor": "You cannot modify somebody else's suggestion.", 14 | "modifyNotConfigured": "This server has removed the suggestions channel from the configuration, and as such, all suggestions are now read-only. Please contact the server's administrators about this incident if this was supposed to work.", 15 | "modifyReplied": "You cannot modify a suggestion that was replied. You may follow it up in the discussion channel.", 16 | "modifySuccess": "Successfully updated your suggestion (`#{{id}}`)!", 17 | "cooldown": "You are blocked from using this command due to cooldown until {{time}}.", 18 | "newMessageContent": "[`#{{id}}`] **{{user.mention}} suggested on {{timestamp}}**:\n{{message}}", 19 | "newMessageEmbedTitle": "#{{id}} - {{user.tag}} ({{user.id}})", 20 | "newFailedToSend": "I'm sorry, but I wasn't able to post a message in {{channel}}. Please report this issue to an administrator. 😦", 21 | "newNotConfigured": "This server has not configured the suggestions channel yet. Please contact the administrators to set it up!", 22 | "newSuccess": "Successfully sent your suggestion (`#{{id}}`)!", 23 | "reactionsFailed": "I was not able to add {{failed, list(conjunction)}}.", 24 | "reactionsFailedAndRemoved": "I was not able to add {{failed, list(conjunction)}}, from which I removed {{removed, list(conjunction)}}, as I lost access to react with them.", 25 | "optionsIdName": "id", 26 | "optionsIdDescription": "The suggestion's number to edit", 27 | "optionsSuggestionName": "suggestion", 28 | "optionsSuggestionDescription": "The suggestion to be posted", 29 | "rePostNoContent": "I could not post the message as a suggestion because it does not have any content to copy from." 30 | } 31 | -------------------------------------------------------------------------------- /src/locales/en-GB/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | { 2 | "modalTitle": "Submit a Suggestion", 3 | "modalLabel": "Content" 4 | } 5 | -------------------------------------------------------------------------------- /src/locales/en-GB/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | { 2 | "contentAccepted": "Accepted by {{tag}} on {{time}}", 3 | "contentConsidered": "Considered by {{tag}} on {{time}}", 4 | "contentDenied": "Denied by {{tag}} on {{time}}", 5 | "updateFailure": "I failed to update the message's content, sorry! 😢", 6 | "updateSuccess": "Successfully updated the message!" 7 | } 8 | -------------------------------------------------------------------------------- /src/locales/en-GB/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | { 2 | "missingResolvePermissions": "You must have permissions to run /resolve in order to use this button.", 3 | "modalTitle": "Suggestion #{{id}}", 4 | "modalFieldLabelAccept": "Message (Accept)", 5 | "modalFieldLabelConsider": "Message (Consider)", 6 | "modalFieldLabelDeny": "Message (Deny)", 7 | "modalFieldPlaceholderAccept": "Looks good to me because...", 8 | "modalFieldPlaceholderConsider": "We're considering this because...", 9 | "modalFieldPlaceholderDeny": "I'm afraid we're denying this because...", 10 | "archiveSuccess": "The suggestion has been archived successfully.", 11 | "archiveThreadFailure": "I was unable to archive the linked thread, sorry!", 12 | "reactionRemovalFailure": "The removal of all reactions failed, you may need to remove them manually.", 13 | "archiveMessageFailure": "I was not able to archive the message, it may have been deleted.", 14 | "threadChannelCreationFailure": "I was not able to create the thread, you might need to contact an administrator to give me permissions, or a moderator to create a thread, sorry! 😢", 15 | "threadMessageUpdateSuccess": "Successfully created the thread {{channel}} and removed the thread button from the suggestion message.", 16 | "threadMessageUpdateFailure": "I was able to successfully create the thread {{channel}}, however, I had a small issue updating the suggestion message, so I wasn't able to remove the button. 😦", 17 | "threadMemberAddFailure": "Also, I was unable to add you to the thread, so you might need to join manually. Sorry for the inconvenience. 😦" 18 | } 19 | -------------------------------------------------------------------------------- /src/locales/en-GB/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "enabled": "Enabled", 3 | "disabled": "Disabled", 4 | "unset": "Unset", 5 | "none": "None" 6 | } 7 | -------------------------------------------------------------------------------- /src/locales/en-US/commands/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "config", 3 | "description": "Manage the configuration for this server", 4 | "viewName": "view", 5 | "viewDescription": "View the current configuration", 6 | "viewContent": "**Current settings**:\n\nChannel: {{channel}}\nAuto-thread: {{autoThread}}\nButtons: {{buttons}}\nCompact: {{compact}}\nCooldown: {{cooldown}}\nDisplay Update History: {{displayUpdateHistory}}\nEmbed: {{embed}}\nReactions: {{reactions}}\n\n> **Note**: To update them, you can use `/config edit`.", 7 | "editName": "edit", 8 | "editDescription": "Edit a configuration value", 9 | "editOptionsChannelDescription": "If set, the channel to post new suggestions at", 10 | "editOptionsAutoThreadDescription": "Whether to automatically create a thread channel on new suggestion messages (default: False)", 11 | "editOptionsButtonsDescription": "Whether to add management buttons on new suggestion messages (default: True)", 12 | "editOptionsCompactDescription": "Whether to use compact mode on new suggestion messages (default: False)", 13 | "editOptionsCooldownDescription": "If set, the cooldown period for users before they can post another suggestion (default: None)", 14 | "editOptionsDisplayUpdateHistoryDescription": "Whether to display up to the 3 last responses on suggestions (default: False)", 15 | "editOptionsEmbedDescription": "Whether to use embeds on new suggestion messages (default: True)", 16 | "editOptionsReactionsDescription": "If set, the reactions to use on new suggestion messages, up to 3, separated by a space", 17 | "editOptionsRemoveReactionsDescription": "Whether to automatically remove all reactions from suggestion messages on archival (default: False)", 18 | "editReactionsInvalidAmount": "I appreciate your enthusiasm, but I cannot afford adding more than 3 reactions, so please keep it to a maximum of 3 emojis, sorry!", 19 | "editReactionsInvalidEmoji": "I could not parse {{value}} to a valid emoji, please try again with another one. Sorry for the inconvenience 😦", 20 | "editCooldownInvalidDuration": "I could not validate a duration from {{value}}, please try using words such as `2h`.", 21 | "editCooldownDurationTooShort": "The cooldown cannot be shorter than 1 second.", 22 | "editCooldownDurationTooLong": "The cooldown cannot be longer than 6 hours.", 23 | "resetName": "reset", 24 | "resetDescription": "Reset a configuration option to its default setting", 25 | "resetOptionsKeyName": "key", 26 | "resetOptionsKeyDescription": "The option to reset", 27 | "resetOptionsKeyChoicesAll": "all", 28 | "keyChannel": "channel", 29 | "keyAutoThread": "auto-thread", 30 | "keyButtons": "buttons", 31 | "keyCompact": "compact", 32 | "keyCooldown": "cooldown", 33 | "keyDisplayUpdateHistory": "display-update-history", 34 | "keyEmbed": "embed", 35 | "keyReactions": "reactions", 36 | "keyRemoveReactions": "remove-reactions", 37 | "editSuccess": "Successfully edited the configuration for this server.", 38 | "editFailure": "I wasn't able to save your changes, sorry 😦" 39 | } 40 | -------------------------------------------------------------------------------- /src/locales/en-US/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "post-guide", 3 | "description": "Posts a guide on how to publish new suggestions", 4 | "optionsHideName": "hide", 5 | "optionsHideDescription": "Whether or not the guide should be hidden", 6 | "optionsTargetName": "target", 7 | "optionsTargetDescription": "The user to mention in the message, if any", 8 | "message": "To submit a new suggestion, simply use the {{command}} command with {{bot}}, or click the \"Submit a Suggestion\" button attached.\n\nYour message will be posted in {{channel}}.", 9 | "buttonSubmit": "Submit a Suggestion", 10 | "buttonSupport": "Support Server" 11 | } 12 | -------------------------------------------------------------------------------- /src/locales/en-US/commands/resolve.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "resolve", 3 | "description": "Resolves the suggestions from this server", 4 | "archiveName": "archive", 5 | "archiveDescription": "Archive a suggestion from this server", 6 | "acceptName": "accept", 7 | "acceptDescription": "Mark a suggestion from this server as accepted", 8 | "considerName": "consider", 9 | "considerDescription": "Mark a suggestion from this server as considered", 10 | "denyName": "deny", 11 | "denyDescription": "Mark a suggestion from this server as denied", 12 | "optionsIdName": "id", 13 | "optionsIdDescription": "The ID of the suggestion to update", 14 | "optionsResponseName": "response", 15 | "optionsResponseDescription": "The response to be added to the suggestion message", 16 | "notConfigured": "This server does not have a suggestions channel configured, please configure it with `/config edit channel #channel` or ask an administrator to do it.", 17 | "suggestionArchived": "The suggestion is archived and cannot be edited.", 18 | "suggestionIdDoesNotExist": "The suggestion ID you specified does not exist.", 19 | "suggestionMessageDeleted": "The suggestion's message has been deleted, and therefore, it has been automatically archived.", 20 | "archiveSuccess": "Successfully archived the suggestion {{id}}.", 21 | "noReason": "*No reason specified*", 22 | "success": "Successfully updated the suggestion {{id}}.", 23 | "failure": "I wasn't able to update the suggestion {{id}}, sorry!" 24 | } 25 | -------------------------------------------------------------------------------- /src/locales/en-US/commands/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "infoEmbedDescription": "Iriss is a bot focused on suggestion management. This is an HTTP only bot built on top of [Skyra HTTP Framework](https://www.npmjs.com/package/@skyra/http-framework)." 3 | } 4 | -------------------------------------------------------------------------------- /src/locales/en-US/commands/suggest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "suggest", 3 | "description": "Create a new suggestion for this server", 4 | "postAsSuggestionName": "Post as Suggestion", 5 | "componentsAccept": "Accept", 6 | "componentsArchive": "Archive", 7 | "componentsConsider": "Consider", 8 | "componentsCreateThread": "Create Thread", 9 | "componentsDeny": "Deny", 10 | "modifyArchived": "You cannot modify a suggestion that is archived. You may reference it with a new suggestion.", 11 | "modifyDoesNotExist": "The suggestion you specified does not exist.", 12 | "modifyMessageDeleted": "It seems the suggestion you are trying to edit was deleted, and as such, automatically archived. Sorry!", 13 | "modifyMismatchingAuthor": "You cannot modify somebody else's suggestion.", 14 | "modifyNotConfigured": "This server has removed the suggestions channel from the configuration, and as such, all suggestions are now read-only. Please contact the server's administrators about this incident if this was supposed to work.", 15 | "modifyReplied": "You cannot modify a suggestion that was replied. You may follow it up in the discussion channel.", 16 | "modifySuccess": "Successfully updated your suggestion (`#{{id}}`)!", 17 | "cooldown": "You are blocked from using this command due to cooldown until {{time}}.", 18 | "newMessageContent": "[`#{{id}}`] **{{user.mention}} suggested on {{timestamp}}**:\n{{message}}", 19 | "newMessageEmbedTitle": "#{{id}} - {{user.tag}} ({{user.id}})", 20 | "newFailedToSend": "I'm sorry, but I wasn't able to post a message in {{channel}}. Please report this issue to an administrator. 😦", 21 | "newNotConfigured": "This server has not configured the suggestions channel yet. Please contact the administrators to set it up!", 22 | "newSuccess": "Successfully sent your suggestion (`#{{id}}`)!", 23 | "reactionsFailed": "I was not able to add {{failed, list(conjunction)}}.", 24 | "reactionsFailedAndRemoved": "I was not able to add {{failed, list(conjunction)}}, from which I removed {{removed, list(conjunction)}}, as I lost access to react with them.", 25 | "optionsIdName": "id", 26 | "optionsIdDescription": "The suggestion's number to edit", 27 | "optionsSuggestionName": "suggestion", 28 | "optionsSuggestionDescription": "The suggestion to be posted", 29 | "rePostNoContent": "I could not post the message as a suggestion because it does not have any content to copy from." 30 | } 31 | -------------------------------------------------------------------------------- /src/locales/en-US/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | { 2 | "modalTitle": "Submit a Suggestion", 3 | "modalLabel": "Content" 4 | } 5 | -------------------------------------------------------------------------------- /src/locales/en-US/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | { 2 | "contentAccepted": "Accepted by {{tag}} on {{time}}", 3 | "contentConsidered": "Considered by {{tag}} on {{time}}", 4 | "contentDenied": "Denied by {{tag}} on {{time}}", 5 | "updateFailure": "I failed to update the message's content, sorry! 😢", 6 | "updateSuccess": "Successfully updated the message!" 7 | } 8 | -------------------------------------------------------------------------------- /src/locales/en-US/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | { 2 | "missingResolvePermissions": "You must have permissions to run /resolve in order to use this button.", 3 | "modalTitle": "Suggestion #{{id}}", 4 | "modalFieldLabelAccept": "Message (Accept)", 5 | "modalFieldLabelConsider": "Message (Consider)", 6 | "modalFieldLabelDeny": "Message (Deny)", 7 | "modalFieldPlaceholderAccept": "Looks good to me because...", 8 | "modalFieldPlaceholderConsider": "We're considering this because...", 9 | "modalFieldPlaceholderDeny": "I'm afraid we're denying this because...", 10 | "archiveSuccess": "The suggestion has been archived successfully.", 11 | "archiveThreadFailure": "I was unable to archive the linked thread, sorry!", 12 | "reactionRemovalFailure": "The removal of all reactions failed, you may need to remove them manually.", 13 | "archiveMessageFailure": "I was not able to archive the message, it may have been deleted.", 14 | "threadChannelCreationFailure": "I was not able to create the thread, you might need to contact an administrator to give me permissions, or a moderator to create a thread, sorry! 😢", 15 | "threadMessageUpdateSuccess": "Successfully created the thread {{channel}} and removed the thread button from the suggestion message.", 16 | "threadMessageUpdateFailure": "I was able to successfully create the thread {{channel}}, however, I had a small issue updating the suggestion message, so I wasn't able to remove the button. 😦", 17 | "threadMemberAddFailure": "Also, I was unable to add you to the thread, so you might need to join manually. Sorry for the inconvenience. 😦" 18 | } 19 | -------------------------------------------------------------------------------- /src/locales/en-US/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "enabled": "Enabled", 3 | "disabled": "Disabled", 4 | "unset": "Unset", 5 | "none": "None" 6 | } 7 | -------------------------------------------------------------------------------- /src/locales/es-419/commands/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "config", 3 | "description": "Gestiona la configuración para este servidor", 4 | "viewName": "ver", 5 | "viewDescription": "Muestra la configuración actual", 6 | "viewContent": "**Configuración actual**:\n\nCanal: {{channel}}\nAuto-hilo: {{autoThread}}\nBotones: {{buttons}}\nCompacto: {{compact}}\nEnfriamiento: {{cooldown}}\nHistorial de Actualización: {{displayUpdateHistory}}\nInsertado: {{embed}}\nReacciones: {{reactions}}\n\n> **Nota**: Para actualizarlos, puedes usar `/config editar`.", 7 | "editName": "editar", 8 | "editDescription": "Edita un valor de configuración", 9 | "editOptionsChannelDescription": "El canal en el que publicar nuevas sugerencias", 10 | "editOptionsAutoThreadDescription": "Si crear automáticamente un canal de hilo en las próximas sugerencias (por defecto: Falso)", 11 | "editOptionsButtonsDescription": "Si añadir botones de administración en las próximas sugerencias (por defecto: Verdadero)", 12 | "editOptionsCompactDescription": "Si usar el modo compacto en las próximas sugerencias (por defecto: Verdadero)", 13 | "editOptionsCooldownDescription": "Si se establece, el período de enfriamiento por usuario entre sugerencias (por defecto: Ninguno)", 14 | "editOptionsDisplayUpdateHistoryDescription": "Si mostrar hasta las 3 últimas respuestas en las sugerencias (por defecto: Falso)", 15 | "editOptionsEmbedDescription": "Si usar insertados en las próximas sugerencias (por defecto: Verdadero)", 16 | "editOptionsReactionsDescription": "Las reacciones a usar en las próximas sugerencias, hasta 3, separados por un espacio", 17 | "editOptionsRemoveReactionsDescription": "Si eliminar automáticamente todas las reacciones al archivar (por defecto: False)", 18 | "editReactionsInvalidAmount": "Aprecio su entusiasmo, pero no puedo permitirme añadir más de 3 reacciones, así que por favor manténgalo hasta un máximo de 3 emojis, ¡lo siento!", 19 | "editReactionsInvalidEmoji": "No pude interpretar {{value}} como un emoji válido, por favor inténtalo de nuevo con otro. Disculpe las molestias 😦", 20 | "editCooldownInvalidDuration": "No pude interpretar {{value}} a una duración, por favor intente usar palabras como `2h`.", 21 | "editCooldownDurationTooShort": "El tiempo de enfriamiento no puede ser inferior a 1 segundo.", 22 | "editCooldownDurationTooLong": "El tiempo de enfriamiento no puede ser superior a 6 horas.", 23 | "resetName": "restablecer", 24 | "resetDescription": "Restablece una opción de configuración a su valor predeterminado", 25 | "resetOptionsKeyName": "opción", 26 | "resetOptionsKeyDescription": "La opción a restablecer", 27 | "resetOptionsKeyChoicesAll": "todo", 28 | "keyChannel": "canal", 29 | "keyAutoThread": "auto-hilo", 30 | "keyButtons": "botones", 31 | "keyCompact": "compacto", 32 | "keyCooldown": "enfriamiento", 33 | "keyDisplayUpdateHistory": "mostrar-historial", 34 | "keyEmbed": "inserción", 35 | "keyReactions": "reacciones", 36 | "keyRemoveReactions": "eliminar-reacciones", 37 | "editSuccess": "Se ha editado correctamente la configuración de este servidor.", 38 | "editFailure": "No pude guardar tus cambios, lo siento 😦" 39 | } 40 | -------------------------------------------------------------------------------- /src/locales/es-419/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "publicar-guía", 3 | "description": "Publica una guía sobre cómo publicar nuevas sugerencias", 4 | "optionsHideName": "ocultar", 5 | "optionsHideDescription": "Si ocultar la guía o no", 6 | "optionsTargetName": "objetivo", 7 | "optionsTargetDescription": "El usuario a mencionar en el mensaje, si lo hubiera", 8 | "message": "Para enviar una nueva sugerencia, simplemente use el comando {{command}} con {{bot}}, o haga clic en el botón \"Enviar una sugerencia\" adjunto debajo.\n\nSu mensaje será publicado en {{channel}}.", 9 | "buttonSubmit": "Enviar una sugerencia", 10 | "buttonSupport": "Servidor de soporte" 11 | } 12 | -------------------------------------------------------------------------------- /src/locales/es-419/commands/resolve.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "resolver", 3 | "description": "Resuelve las sugerencias de este servidor", 4 | "archiveName": "archivar", 5 | "archiveDescription": "Archiva una sugerencia de este servidor", 6 | "acceptName": "acceptar", 7 | "acceptDescription": "Marca una sugerencia de este servidor como aceptada", 8 | "considerName": "considerar", 9 | "considerDescription": "Marca una sugerencia de este servidor como considerada", 10 | "denyName": "rechazar", 11 | "denyDescription": "Marca una sugerencia de este servidor como rechazada", 12 | "optionsIdName": "identificador", 13 | "optionsIdDescription": "El identificador de la sugerencia a actualizar", 14 | "optionsResponseName": "respuesta", 15 | "optionsResponseDescription": "La respuesta a añadir al mensaje de sugerencia", 16 | "notConfigured": "Este servidor no tiene un canal de sugerencias configurado, por favor configúrelo con `/config editar canal #channel` o pida a un administrador que lo haga.", 17 | "suggestionArchived": "La sugerencia está archivada y no puede ser editada.", 18 | "suggestionIdDoesNotExist": "El identificador de sugerencia que has especificado no existe.", 19 | "suggestionMessageDeleted": "El mensaje de la sugerencia ha sido eliminado y, por lo tanto, ha sido archivado automáticamente.", 20 | "archiveSuccess": "Se archivó con éxito la sugerencia {{id}}.", 21 | "noReason": "*Ningún motivo especificado*", 22 | "success": "Se actualizó correctamente la sugerencia {{id}}.", 23 | "failure": "No pude actualizar la sugerencia {{id}}. ¡Lo siento!" 24 | } 25 | -------------------------------------------------------------------------------- /src/locales/es-419/commands/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "infoEmbedDescription": "Iriss es un bot enfocado en la gestión de sugerencias. Esta es un bot exclusivamente HTTP construido sobre [Skyra HTTP Framework](https://www.npmjs.com/package/@skyra/http-framework)." 3 | } 4 | -------------------------------------------------------------------------------- /src/locales/es-419/commands/suggest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sugerir", 3 | "description": "Crea una nueva sugerencia para este servidor", 4 | "postAsSuggestionName": "Publicar como Sugerencia", 5 | "componentsAccept": "Acceptar", 6 | "componentsArchive": "Archivar", 7 | "componentsConsider": "Considerar", 8 | "componentsCreateThread": "Crear Hilo", 9 | "componentsDeny": "Rechazar", 10 | "modifyArchived": "No puedes modificar una sugerencia que fue archivada. Pero puedes referirla en una nueva sugerencia.", 11 | "modifyDoesNotExist": "La sugerencia que has especificado no existe.", 12 | "modifyMessageDeleted": "Parece que la sugerencia que estás intentando editar ha sido eliminada, y como tal, archivada automáticamente. ¡Lo siento!", 13 | "modifyMismatchingAuthor": "No puedes modificar la sugerencia de otro.", 14 | "modifyNotConfigured": "Este servidor ha eliminado el canal de sugerencias de la configuración, y como tal, todas las sugerencias son ahora de solo lectura. Póngase en contacto con los administradores del servidor sobre este incidente si se debe a un error.", 15 | "modifyReplied": "No puedes modificar una sugerencia que ha sido respondida. Puedes seguirla en el canal de discusión.", 16 | "modifySuccess": "¡Actualizada correctamente su sugerencia (`#{{id}}`)!", 17 | "cooldown": "Usted no puede usar este comando debido al tiempo de enfriamiento hasta {{time}}.", 18 | "newMessageContent": "[`#{{id}}`] **{{user.mention}} ha sugerido el {{timestamp}}**:\n{{message}}", 19 | "newMessageEmbedTitle": "#{{id}} - {{user.tag}} ({{user.id}})", 20 | "newFailedToSend": "Lo siento, pero no pude publicar un mensaje en {{channel}}. Por favor, reporta este problema a un administrador. 😦", 21 | "newNotConfigured": "Este servidor no ha configurado el canal de sugerencias todavía. ¡Por favor, contacte con los administradores para configurarlo!", 22 | "newSuccess": "¡Enviada con éxito su sugerencia (`#{{id}}`)!", 23 | "reactionsFailed": "No pude añadir {{failed, list(conjunction)}}.", 24 | "reactionsFailedAndRemoved": "No pude añadir {{failed, list(conjunction)}}, de las cuales quité {{removed, list(conjunction)}}, ya que perdí acceso para reaccionar con ellos.", 25 | "optionsIdName": "identificador", 26 | "optionsIdDescription": "El número de la sugerencia a editar", 27 | "optionsSuggestionName": "sugerir", 28 | "optionsSuggestionDescription": "La sugerencia a publicar", 29 | "rePostNoContent": "No pude publicar el mensaje como una sugerencia porque no tiene ningún contenido del cual copiar." 30 | } 31 | -------------------------------------------------------------------------------- /src/locales/es-419/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | { 2 | "modalTitle": "Enviar una sugerencia", 3 | "modalLabel": "Contenido" 4 | } 5 | -------------------------------------------------------------------------------- /src/locales/es-419/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | { 2 | "contentAccepted": "Aceptado por {{tag}} el {{time}}", 3 | "contentConsidered": "Considerado por {{tag}} el {{time}}", 4 | "contentDenied": "Rechazado por {{tag}} el {{time}}", 5 | "updateFailure": "No pude actualizar el contenido del mensaje, ¡perdón! 😢", 6 | "updateSuccess": "¡He actualizado el mensaje con éxito!" 7 | } 8 | -------------------------------------------------------------------------------- /src/locales/es-419/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | { 2 | "missingResolvePermissions": "Debes tener permisos para ejecutar /resolver para poder usar este botón.", 3 | "modalTitle": "Sugerencia #{{id}}", 4 | "modalFieldLabelAccept": "Mensaje (Aceptar)", 5 | "modalFieldLabelConsider": "Mensaje (Considerar)", 6 | "modalFieldLabelDeny": "Mensaje (Rechazar)", 7 | "modalFieldPlaceholderAccept": "Me parece bien porque...", 8 | "modalFieldPlaceholderConsider": "Estamos considerando esto porque...", 9 | "modalFieldPlaceholderDeny": "Me temo que rechazaremos esto porque...", 10 | "archiveSuccess": "La sugerencia ha sido archivada con éxito.", 11 | "archiveThreadFailure": "No he podido archivar el hilo enlazado, ¡lo siento!", 12 | "reactionRemovalFailure": "La eliminación de todas las reacciones falló, es posible que usted necesite eliminarlas manualmente.", 13 | "archiveMessageFailure": "No pude archivar el mensaje, puede que haya sido eliminado.", 14 | "threadChannelCreationFailure": "No pude crear el hilo, puede que necesite ponerse en contacto con un administrador para darme permisos, o un moderador para crear un hilo, ¡lo siento! 😢", 15 | "threadMessageUpdateSuccess": "Se ha creado correctamente el hilo {{channel}} y se ha eliminado el botón del hilo del mensaje de la sugerencia.", 16 | "threadMessageUpdateFailure": "He podido crear el hilo {{channel}}, sin embargo, tuve un pequeño problema actualizando el mensaje de sugerencia, así que no pude eliminar el botón. 😦", 17 | "threadMemberAddFailure": "Además, no pude añadirte al hilo, así que puede que tengas que unirte manualmente. Disculpe las molestias. 😦" 18 | } 19 | -------------------------------------------------------------------------------- /src/locales/es-419/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "enabled": "Habilitado", 3 | "disabled": "Desabilitado", 4 | "unset": "Sin definir", 5 | "none": "Ninguno" 6 | } 7 | -------------------------------------------------------------------------------- /src/locales/es-ES/commands/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "config", 3 | "description": "Gestiona la configuración para este servidor", 4 | "viewName": "mostrar", 5 | "viewDescription": "Muestra la configuración actual", 6 | "viewContent": "**Configuración actual**:\n\nCanal: {{channel}}\nAuto-hilo: {{autoThread}}\nBotones: {{buttons}}\nCompacto: {{compact}}\nEnfriamiento: {{cooldown}}\nHistorial de Actualización: {{displayUpdateHistory}}\nInsertado: {{embed}}\nReacciones: {{reactions}}\n\n> **Nota**: Para actualizarlos, puedes usar `/config editar`.", 7 | "editName": "editar", 8 | "editDescription": "Edita un valor de configuración", 9 | "editOptionsChannelDescription": "El canal en el que publicar nuevas sugerencias", 10 | "editOptionsAutoThreadDescription": "Si crear automáticamente un canal de hilo en las próximas sugerencias (por defecto: Falso)", 11 | "editOptionsButtonsDescription": "Si añadir botones de administración en las próximas sugerencias (por defecto: Verdadero)", 12 | "editOptionsCompactDescription": "Si usar el modo compacto en las próximas sugerencias (por defecto: Verdadero)", 13 | "editOptionsCooldownDescription": "Si se establece, el período de enfriamiento por usuario entre sugerencias (por defecto: Ninguno)", 14 | "editOptionsDisplayUpdateHistoryDescription": "Si mostrar hasta las 3 últimas respuestas en las sugerencias (por defecto: Falso)", 15 | "editOptionsEmbedDescription": "Si usar insertados en las próximas sugerencias (por defecto: Verdadero)", 16 | "editOptionsReactionsDescription": "Las reacciones a usar en las próximas sugerencias, hasta 3, separados por un espacio", 17 | "editOptionsRemoveReactionsDescription": "Si eliminar automáticamente todas las reacciones al archivar (por defecto: False)", 18 | "editReactionsInvalidAmount": "Aprecio su entusiasmo, pero no puedo permitirme añadir más de 3 reacciones, así que por favor manténgalo hasta un máximo de 3 emojis, ¡lo siento!", 19 | "editReactionsInvalidEmoji": "No pude interpretar {{value}} como un emoji válido, por favor inténtalo de nuevo con otro. Disculpe las molestias 😦", 20 | "editCooldownInvalidDuration": "No pude interpretar {{value}} a una duración, por favor intente usar palabras como `2h`.", 21 | "editCooldownDurationTooShort": "El tiempo de enfriamiento no puede ser inferior a 1 segundo.", 22 | "editCooldownDurationTooLong": "El tiempo de enfriamiento no puede ser superior a 6 horas.", 23 | "resetName": "restablecer", 24 | "resetDescription": "Restablece una opción de configuración a su valor predeterminado", 25 | "resetOptionsKeyName": "opción", 26 | "resetOptionsKeyDescription": "La opción a restablecer", 27 | "resetOptionsKeyChoicesAll": "todo", 28 | "keyChannel": "canal", 29 | "keyAutoThread": "auto-hilo", 30 | "keyButtons": "botones", 31 | "keyCompact": "compacto", 32 | "keyCooldown": "enfriamiento", 33 | "keyDisplayUpdateHistory": "mostrar-historial", 34 | "keyEmbed": "inserción", 35 | "keyReactions": "reacciones", 36 | "keyRemoveReactions": "eliminar-reacciones", 37 | "editSuccess": "Se ha editado correctamente la configuración de este servidor.", 38 | "editFailure": "No pude guardar tus cambios, lo siento 😦" 39 | } 40 | -------------------------------------------------------------------------------- /src/locales/es-ES/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "publicar-guía", 3 | "description": "Publica una guía sobre cómo publicar nuevas sugerencias", 4 | "optionsHideName": "ocultar", 5 | "optionsHideDescription": "Si ocultar la guía o no", 6 | "optionsTargetName": "usuario", 7 | "optionsTargetDescription": "El usuario a mencionar en el mensaje, si lo hubiera", 8 | "message": "Para enviar una nueva sugerencia, simplemente use el comando {{command}} con {{bot}}, o haga clic en el botón \"Enviar una sugerencia\" adjunto debajo.\n\nSu mensaje será publicado en {{channel}}.", 9 | "buttonSubmit": "Enviar una sugerencia", 10 | "buttonSupport": "Servidor de soporte" 11 | } 12 | -------------------------------------------------------------------------------- /src/locales/es-ES/commands/resolve.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "resolver", 3 | "description": "Resuelve las sugerencias de este servidor", 4 | "archiveName": "archivar", 5 | "archiveDescription": "Archiva una sugerencia de este servidor", 6 | "acceptName": "acceptar", 7 | "acceptDescription": "Marca una sugerencia de este servidor como aceptada", 8 | "considerName": "considerar", 9 | "considerDescription": "Marca una sugerencia de este servidor como considerada", 10 | "denyName": "rechazar", 11 | "denyDescription": "Marca una sugerencia de este servidor como rechazada", 12 | "optionsIdName": "id", 13 | "optionsIdDescription": "El identificador de la sugerencia a actualizar", 14 | "optionsResponseName": "respuesta", 15 | "optionsResponseDescription": "La respuesta a añadir al mensaje de sugerencia", 16 | "notConfigured": "Este servidor no tiene un canal de sugerencias configurado, por favor configúrelo con `/config editar canal #channel` o pida a un administrador que lo haga.", 17 | "suggestionArchived": "La sugerencia está archivada y no puede ser editada.", 18 | "suggestionIdDoesNotExist": "El identificador de sugerencia que has especificado no existe.", 19 | "suggestionMessageDeleted": "El mensaje de la sugerencia ha sido eliminado y, por lo tanto, ha sido archivado automáticamente.", 20 | "archiveSuccess": "Se archivó con éxito la sugerencia {{id}}.", 21 | "noReason": "*Ningún motivo especificado*", 22 | "success": "Se actualizó correctamente la sugerencia {{id}}.", 23 | "failure": "No pude actualizar la sugerencia {{id}}. ¡Lo siento!" 24 | } 25 | -------------------------------------------------------------------------------- /src/locales/es-ES/commands/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "infoEmbedDescription": "Iriss es un bot enfocado en la gestión de sugerencias. Esta es un bot exclusivamente HTTP construido sobre [Skyra HTTP Framework](https://www.npmjs.com/package/@skyra/http-framework)." 3 | } 4 | -------------------------------------------------------------------------------- /src/locales/es-ES/commands/suggest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sugerir", 3 | "description": "Crea una nueva sugerencia para este servidor", 4 | "postAsSuggestionName": "Publicar como Sugerencia", 5 | "componentsAccept": "Acceptar", 6 | "componentsArchive": "Archivar", 7 | "componentsConsider": "Considerar", 8 | "componentsCreateThread": "Crear Hilo", 9 | "componentsDeny": "Rechazar", 10 | "modifyArchived": "No puedes modificar una sugerencia que fue archivada. Pero puedes referirla en una nueva sugerencia.", 11 | "modifyDoesNotExist": "La sugerencia que has especificado no existe.", 12 | "modifyMessageDeleted": "Parece que la sugerencia que estás intentando editar ha sido eliminada, y como tal, archivada automáticamente. ¡Lo siento!", 13 | "modifyMismatchingAuthor": "No puedes modificar la sugerencia de otro.", 14 | "modifyNotConfigured": "Este servidor ha eliminado el canal de sugerencias de la configuración, y como tal, todas las sugerencias son ahora de solo lectura. Póngase en contacto con los administradores del servidor sobre este incidente si se debe a un error.", 15 | "modifyReplied": "No puedes modificar una sugerencia que ha sido respondida. Puedes seguirla en el canal de discusión.", 16 | "modifySuccess": "¡Actualizada correctamente su sugerencia (`#{{id}}`)!", 17 | "cooldown": "Usted no puede usar este comando debido al tiempo de enfriamiento hasta {{time}}.", 18 | "newMessageContent": "[`#{{id}}`] **{{user.mention}} ha sugerido el {{timestamp}}**:\n{{message}}", 19 | "newMessageEmbedTitle": "#{{id}} - {{user.tag}} ({{user.id}})", 20 | "newFailedToSend": "Lo siento, pero no pude publicar un mensaje en {{channel}}. Por favor, reporta este problema a un administrador. 😦", 21 | "newNotConfigured": "Este servidor no ha configurado el canal de sugerencias todavía. ¡Por favor, contacte con los administradores para configurarlo!", 22 | "newSuccess": "¡Enviada con éxito su sugerencia (`#{{id}}`)!", 23 | "reactionsFailed": "No pude añadir {{failed, list(conjunction)}}.", 24 | "reactionsFailedAndRemoved": "No pude añadir {{failed, list(conjunction)}}, de las cuales quité {{removed, list(conjunction)}}, ya que perdí acceso para reaccionar con ellos.", 25 | "optionsIdName": "identificador", 26 | "optionsIdDescription": "El número de la sugerencia a editar", 27 | "optionsSuggestionName": "sugerir", 28 | "optionsSuggestionDescription": "La sugerencia a publicar", 29 | "rePostNoContent": "No pude publicar el mensaje como una sugerencia porque no tiene ningún contenido del cual copiar." 30 | } 31 | -------------------------------------------------------------------------------- /src/locales/es-ES/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | { 2 | "modalTitle": "Enviar una sugerencia", 3 | "modalLabel": "Contenido" 4 | } 5 | -------------------------------------------------------------------------------- /src/locales/es-ES/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | { 2 | "contentAccepted": "Aceptado por {{tag}} el {{time}}", 3 | "contentConsidered": "Considerado por {{tag}} el {{time}}", 4 | "contentDenied": "Rechazado por {{tag}} el {{time}}", 5 | "updateFailure": "No pude actualizar el contenido del mensaje, ¡perdón! 😢", 6 | "updateSuccess": "¡He actualizado el mensaje con éxito!" 7 | } 8 | -------------------------------------------------------------------------------- /src/locales/es-ES/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | { 2 | "missingResolvePermissions": "Debes tener permisos para ejecutar /resolver para poder usar este botón.", 3 | "modalTitle": "Sugerencia #{{id}}", 4 | "modalFieldLabelAccept": "Mensaje (Aceptar)", 5 | "modalFieldLabelConsider": "Mensaje (Considerar)", 6 | "modalFieldLabelDeny": "Mensaje (Rechazar)", 7 | "modalFieldPlaceholderAccept": "Me parece bien porque...", 8 | "modalFieldPlaceholderConsider": "Estamos considerando esto porque...", 9 | "modalFieldPlaceholderDeny": "Me temo que rechazaremos esto porque...", 10 | "archiveSuccess": "La sugerencia ha sido archivada con éxito.", 11 | "archiveThreadFailure": "No he podido archivar el hilo enlazado, ¡lo siento!", 12 | "reactionRemovalFailure": "La eliminación de todas las reacciones falló, es posible que usted necesite eliminarlas manualmente.", 13 | "archiveMessageFailure": "No pude archivar el mensaje, puede que haya sido eliminado.", 14 | "threadChannelCreationFailure": "No pude crear el hilo, puede que necesite ponerse en contacto con un administrador para darme permisos, o un moderador para crear un hilo, ¡lo siento! 😢", 15 | "threadMessageUpdateSuccess": "Se ha creado correctamente el hilo {{channel}} y se ha eliminado el botón del hilo del mensaje de la sugerencia.", 16 | "threadMessageUpdateFailure": "He podido crear el hilo {{channel}}, sin embargo, tuve un pequeño problema actualizando el mensaje de sugerencia, así que no pude eliminar el botón. 😦", 17 | "threadMemberAddFailure": "Además, no pude añadirte al hilo, así que puede que tengas que unirte manualmente. Disculpe las molestias. 😦" 18 | } 19 | -------------------------------------------------------------------------------- /src/locales/es-ES/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "enabled": "Habilitado", 3 | "disabled": "Desabilitado", 4 | "unset": "Sin definir", 5 | "none": "Ninguno" 6 | } 7 | -------------------------------------------------------------------------------- /src/locales/fi/commands/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "asetukset", 3 | "description": "Hallitse palvelimen asetuksia", 4 | "viewName": "näytä", 5 | "viewDescription": "Näytä tämänhetkiset asetukset", 6 | "viewContent": "**Nykyiset asetukset**:\n\nKanava: {{channel}}\nAuto-viestiketju: {{autoThread}}\nPainikkeet: {{buttons}}\nTiivis: {{compact}}\nJäähy: {{cooldown}}\nNäytä Päivityshistoria: {{displayUpdateHistory}}\nEmbed: {{embed}}\nReaktiot: {{reactions}}\n\n> **Huom**: Päivittääksesi niitä, voit käyttää `/config edit`.", 7 | "editName": "muokkaa", 8 | "editDescription": "Muokkaa asetusta", 9 | "editOptionsChannelDescription": "Jos asetettu, kanava johon uudet ehdotukset lähetetään", 10 | "editOptionsAutoThreadDescription": "Luodaanko uusi viestiketju-kanava uusia ehdotusviestejä varten (oletus: False)", 11 | "editOptionsButtonsDescription": "Lisätäänkö hallintapainikkeet uusiin ehdotusviesteihin (oletus: True)", 12 | "editOptionsCompactDescription": "Käytetäänkö tiivistä tilaa uusissa ehdotusviesteissä (oletus: False)", 13 | "editOptionsCooldownDescription": "Jos asetettu, jäähyaika käyttäjille ennen uuden ehdotuksen lähettämistä (oletus: Ei ole)", 14 | "editOptionsDisplayUpdateHistoryDescription": "Näytetäänkö kolme viimeisintä vastausta ehdotuksissa (oletus: False)", 15 | "editOptionsEmbedDescription": "Käytetäänkö upotuksia uusissa ehdotusviesteissä (oletus: True)", 16 | "editOptionsReactionsDescription": "Jos asetettu, reaktiot joita käyttää uusissa ehdotusviesteissä, kolmeen asti, erota välilyönnillä", 17 | "editOptionsRemoveReactionsDescription": "Poistetaanko kaikki reaktiot ehdotusviestistä automaattisesti arkistoidessa (oletus: False)", 18 | "editReactionsInvalidAmount": "Arvostan intoasi, mutta en voi lisätä yli 3 reaktiota, joten pidäthän sen maksimissaan 3 emojissa, anteeksi!", 19 | "editReactionsInvalidEmoji": "En voinut muuntaa arvoa {{value}} emojiksi, yritä toisella uudelleen. Pahoitteluni vaivasta 😦", 20 | "editCooldownInvalidDuration": "En voinut tarkistaa keston oikeellisuutta arvosta {{value}}, käytäthän sanoja kuten `2h`.", 21 | "editCooldownDurationTooShort": "Jäähy ei voi olla lyhyempi kuin sekunti.", 22 | "editCooldownDurationTooLong": "Jäähy ei voi olla pidempi kuin kuusi tuntia.", 23 | "resetName": "nollaa", 24 | "resetDescription": "Nollaa asetus oletusarvoon", 25 | "resetOptionsKeyName": "asetus", 26 | "resetOptionsKeyDescription": "Asetus joka nollataan", 27 | "resetOptionsKeyChoicesAll": "kaikki", 28 | "keyChannel": "kanava", 29 | "keyAutoThread": "auto-viestiketju", 30 | "keyButtons": "painikkeet", 31 | "keyCompact": "tiivis", 32 | "keyCooldown": "jäähy", 33 | "keyDisplayUpdateHistory": "näytä-päivitys-historia", 34 | "keyEmbed": "upotus", 35 | "keyReactions": "reaktiot", 36 | "keyRemoveReactions": "poista-reaktiot", 37 | "editSuccess": "Palvelimen asetuksien muokkaaminen onnistui.", 38 | "editFailure": "En voinut tallentaa muutoksiasi, pahoitteluni 😦" 39 | } 40 | -------------------------------------------------------------------------------- /src/locales/fi/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/fi/commands/resolve.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ratkaise", 3 | "description": "Ratkaise ehdotus palvelimelta", 4 | "archiveName": "arkistoi", 5 | "archiveDescription": "Arkistoi ehdotus palvelimelta", 6 | "acceptName": "hyväksy", 7 | "acceptDescription": "Merkitse ehdotus hyväksytyksi palvelimelta", 8 | "considerName": "harkitse", 9 | "considerDescription": "Merkitse ehdotus harkituksi palvelimelta", 10 | "denyName": "hylkää", 11 | "denyDescription": "Merkitse ehdotus hylätyksi palvelimelta", 12 | "optionsIdName": "id", 13 | "optionsIdDescription": "Ehdotuksen ID joka päivitetään", 14 | "optionsResponseName": "vastaus", 15 | "optionsResponseDescription": "Ehdotusviestiin liitettävä vastaus", 16 | "notConfigured": "Tälle palvelimelle ei ole määritetty ehdotuskanavaa, määritä se käyttämällä `/asetukset muokkaa kanava #kanava` tai pyydä ylläpitoa määrittämään se.", 17 | "suggestionArchived": "Ehdotus on arkistoitu ja sitä ei voi muokata.", 18 | "suggestionIdDoesNotExist": "Ehdotusta annetulla ID'llä ei ole olemassa.", 19 | "suggestionMessageDeleted": "Ehdotuksen viesti on poistettu, joten ehdotus on automaattisesti arkistoitu.", 20 | "archiveSuccess": "Ehdotus {{id}} arkistoitiin onnistuneesti.", 21 | "noReason": "*Ei määritettyä syytä*", 22 | "success": "Ehdotus {{id}} päivitetty onnistuneesti.", 23 | "failure": "En pystynyt päivittämään ehdotusta {{id}}, pahoitteluni!" 24 | } 25 | -------------------------------------------------------------------------------- /src/locales/fi/commands/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "infoEmbedDescription": "Iriss on botti joka on keskittynyt ehdotusten hallintaan. Tämä on vain HTTP-botti joka perustuu [Skyra HTTP Frameworkkiin](https://www.npmjs.com/package/@skyra/http-framework)." 3 | } 4 | -------------------------------------------------------------------------------- /src/locales/fi/commands/suggest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ehdota", 3 | "description": "Luo uusi ehdotus palvelimelle", 4 | "postAsSuggestionName": "Lähetä ehdotuksena", 5 | "componentsAccept": "Hyväksy", 6 | "componentsArchive": "Arkistoi", 7 | "componentsConsider": "Harkitse", 8 | "componentsCreateThread": "Luo Viestiketju", 9 | "componentsDeny": "Hylkää", 10 | "modifyArchived": "Et voi muokata ehdotusta joka on arkistoitu. Voit viitata siihen uudessa ehdotuksessa.", 11 | "modifyDoesNotExist": "Antamaasi ehdotusta ei ole olemassa.", 12 | "modifyMessageDeleted": "Näyttäisi siltä, että ehdotus jota yrität muokata on poistettu, jolloin se on automaattisesti arkistoitu. Pahoitteluni!", 13 | "modifyMismatchingAuthor": "Et voi muokata jonkun toisen ehdotusta.", 14 | "modifyNotConfigured": "Palvelin on poistanut ehdotuskanavan asetuksista, joten kaikki ehdotukset ovat nyt vain-luku tilassa. Otathan yhteyttä palvelimen ylläpitoon mikäli tämä ei ole toivottua.", 15 | "modifyReplied": "Et voi muokata ehdotusta johon on vastattu. Voit jatkaa keskustelua keskustelu kanavalla.", 16 | "modifySuccess": "Ehdotuksesi päivitettiin onnistuneesti (`#{{id}}`)!", 17 | "cooldown": "Olet estetty käyttämästä tätä komentoa jäähyn vuoksi {{time}} asti.", 18 | "newMessageContent": "[`#{{id}}`] **{{user.mention}} ehdotti aikana {{timestamp}}**:\n{{message}}", 19 | "newMessageEmbedTitle": "#{{id}} - {{user.tag}} ({{user.id}})", 20 | "newFailedToSend": "Pahoitteluni, mutta en voinut lähettää viestiä kanavalle {{channel}}. Ilmoitathan tästä ylläpitäjälle. 😦", 21 | "newNotConfigured": "Palvelimelle ei ole vielä määritetty ehdotuskanavaa. Otathan yhteyttä ylläpitäjiin sen määrittämiseksi!", 22 | "newSuccess": "Ehdotuksesi on lähetetty onnistuneesti (`#{{id}}`)!", 23 | "reactionsFailed": "En pystynyt lisäämään {{failed, list(conjunction)}}.", 24 | "reactionsFailedAndRemoved": "En pystynyt lisäämään {{failed, list(conjunction)}}, joista poistin {{removed, list(conjunction)}}, sillä en pysty reagoida niillä.", 25 | "optionsIdName": "id", 26 | "optionsIdDescription": "Muokattavan ehdotuksen numero", 27 | "optionsSuggestionName": "ehdotus", 28 | "optionsSuggestionDescription": "Julkaistava ehdotus", 29 | "rePostNoContent": "En voinut lähettää viestiä ehdotuksena, koska siinä ei ole kopioitavaa sisältöä." 30 | } 31 | -------------------------------------------------------------------------------- /src/locales/fi/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/fi/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | { 2 | "contentAccepted": "Hyväksyjä {{tag}} aikana {{time}}", 3 | "contentConsidered": "Harkitsija {{tag}} aikana {{time}}", 4 | "contentDenied": "Hylkääjä {{tag}} aikana {{time}}", 5 | "updateFailure": "En voinut päivittää viestin sisältöä, anteeksi! 😢", 6 | "updateSuccess": "Viesti päivitetty onnistuneesti!" 7 | } 8 | -------------------------------------------------------------------------------- /src/locales/fi/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | { 2 | "missingResolvePermissions": "Sinulla on oltava oikeus käyttää komentoa /ratkaise käyttääksesi painiketta.", 3 | "modalTitle": "Ehdotus #{{id}}", 4 | "modalFieldLabelAccept": "Viesti (Hyväksy)", 5 | "modalFieldLabelConsider": "Viesti (Harkitse)", 6 | "modalFieldLabelDeny": "Viesti (Hylkää)", 7 | "modalFieldPlaceholderAccept": "Vaikuttaa hyvältä mielestäni, koska...", 8 | "modalFieldPlaceholderConsider": "Harkitsemme tätä, koska...", 9 | "modalFieldPlaceholderDeny": "Valitettavasti hylkäämme tämän, koska...", 10 | "archiveSuccess": "Ehdotus on arkistoitu onnistuneesti.", 11 | "archiveThreadFailure": "En voinut arkistoida linkattua viestiketjua, pahoitteluni!", 12 | "reactionRemovalFailure": "Reaktioiden poisto epäonnistui, ne saattaa joutua poistamaan käsin.", 13 | "archiveMessageFailure": "En voinut arkistoida viestiä, se on mahdollisesti poistettu.", 14 | "threadChannelCreationFailure": "En voinut luoda viestiketjua, saatat joutua ottamaan yhteyttä ylläpitäjään muokataksesi oikeuksiani, tai pyytämään moderaattoria luomaan viestiketju, pahoitteluni! 😢", 15 | "threadMessageUpdateSuccess": "Viestiketju {{channel}} luotu onnistuneesti, ja viestiketju painike on poistettu ehdotusviestistä.", 16 | "threadMessageUpdateFailure": "Loin viestiketjun {{channel}} onnistuneesti, mutta minulla oli ongelmia ehdotusviestin päivittämisessä, joten en voinut poistaa painiketta. 😦", 17 | "threadMemberAddFailure": "Ainiin, en myöskään voinut lisätä sinua viestiketjuun, joten saatat joutua liittymään siihen itse. Pahoitteluni aiheutuneesta vaivasta. 😦" 18 | } 19 | -------------------------------------------------------------------------------- /src/locales/fi/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "enabled": "Käytössä", 3 | "disabled": "Pois käytöstä", 4 | "unset": "Poista", 5 | "none": "Ei mitään" 6 | } 7 | -------------------------------------------------------------------------------- /src/locales/fr/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "post-guide", 3 | "description": "Publication d'un guide sur la manière de publier de nouvelles suggestions", 4 | "optionsHideName": "cacher", 5 | "optionsHideDescription": "Si le guide doit être caché ou non", 6 | "optionsTargetName": "cible", 7 | "optionsTargetDescription": "L'utilisateur à mentionner dans le message, le cas échéant", 8 | "message": "Pour soumettre une nouvelle suggestion, il suffit d'utiliser la commande {{command}} avec {{bot}}, ou de cliquer sur le bouton \"Soumettre une suggestion\" ci-joint.\n\nVotre message sera publié dans {{channel}}.", 9 | "buttonSubmit": "Soumettre une suggestion", 10 | "buttonSupport": "Serveur de support" 11 | } 12 | -------------------------------------------------------------------------------- /src/locales/fr/commands/resolve.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "résoudre", 3 | "description": "Résout les suggestions de ce serveur", 4 | "archiveName": "archiver", 5 | "archiveDescription": "Archiver une suggestion de ce serveur", 6 | "acceptName": "accepter", 7 | "acceptDescription": "Marquer une suggestion de ce serveur comme acceptée", 8 | "considerName": "considérer", 9 | "considerDescription": "Marquer une suggestion de ce serveur comme prise en compte", 10 | "denyName": "refuser", 11 | "denyDescription": "Marquer une suggestion de ce serveur comme refusée", 12 | "optionsIdName": "id", 13 | "optionsIdDescription": "L'ID de la suggestion à mettre à jour", 14 | "optionsResponseName": "réponse", 15 | "optionsResponseDescription": "La réponse à ajouter au message de suggestion", 16 | "notConfigured": "Ce serveur n'a pas de canal de suggestions configuré, veuillez le configurer avec `/config edit channel #channel` ou demander à un administrateur de le faire.", 17 | "suggestionArchived": "La suggestion est archivée et ne peut pas être modifiée.", 18 | "suggestionIdDoesNotExist": "L'identifiant de la suggestion que vous avez spécifié n'existe pas.", 19 | "suggestionMessageDeleted": "Le message de la suggestion a été supprimé et a donc été automatiquement archivé.", 20 | "archiveSuccess": "Archivage réussi de la suggestion {{id}}.", 21 | "noReason": "*Aucune raison n'est précisée*", 22 | "success": "Mise à jour réussie de la suggestion {{id}}.", 23 | "failure": "Je n'ai pas pu mettre à jour la suggestion {{id}}, désolé !" 24 | } 25 | -------------------------------------------------------------------------------- /src/locales/fr/commands/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "infoEmbedDescription": "Iriss est un bot axé sur la gestion des suggestions. Il s'agit d'un bot HTTP uniquement construit sur [Skyra HTTP Framework] (https://www.npmjs.com/package/@skyra/http-framework)." 3 | } 4 | -------------------------------------------------------------------------------- /src/locales/fr/commands/suggest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "suggerer", 3 | "description": "Créer une nouvelle suggestion pour ce serveur", 4 | "postAsSuggestionName": "Publier comme suggestion", 5 | "componentsAccept": "Accepter", 6 | "componentsArchive": "Archiver", 7 | "componentsConsider": "Considérer", 8 | "componentsCreateThread": "Créer un fil", 9 | "componentsDeny": "Refuser", 10 | "modifyArchived": "Vous ne pouvez pas modifier une suggestion archivée. Vous pouvez y faire référence avec une nouvelle suggestion.", 11 | "modifyDoesNotExist": "La suggestion que vous avez spécifiée n'existe pas.", 12 | "modifyMessageDeleted": "Il semble que la suggestion que vous essayez de modifier ait été supprimée et donc automatiquement archivée. Désolé de ne pas avoir pu le faire!", 13 | "modifyMismatchingAuthor": "Vous ne pouvez pas modifier la suggestion de quelqu'un d'autre.", 14 | "modifyNotConfigured": "Ce serveur a supprimé le canal des suggestions de la configuration, et de ce fait, toutes les suggestions sont désormais en lecture seule. Veuillez contacter les administrateurs du serveur à propos de cet incident si cela était censé fonctionner.", 15 | "modifyReplied": "Vous ne pouvez pas modifier une suggestion qui a reçu une réponse. Vous pouvez y donner suite dans le canal de discussion.", 16 | "modifySuccess": "La mise à jour de votre suggestion (`#{{id}}`) a été effectuée avec succès !", 17 | "cooldown": "Vous ne pouvez plus utiliser cette commande en raison du temps de recharge jusqu'à {{time}}.", 18 | "newMessageContent": "[`#{{id}}`] **{{user.mention}} suggéré le {{timestamp}}** :\n{{message}}", 19 | "newMessageEmbedTitle": "#{{id}} - {{user.tag}} ({{user.id}})", 20 | "newFailedToSend": "Je suis désolé, mais je n'ai pas pu poster un message dans {{channel}}. Veuillez signaler ce problème à un administrateur. 😦", 21 | "newNotConfigured": "Ce serveur n'a pas encore configuré le canal de suggestions. Veuillez contacter les administrateurs pour le configurer !", 22 | "newSuccess": "Envoi réussi de votre suggestion (`#{{id}}`) !", 23 | "reactionsFailed": "Je n'ai pas pu ajouter {{failed, list(conjunction)}}.", 24 | "reactionsFailedAndRemoved": "Je n'ai pas pu ajouter {{failed, list(conjunction)}}, dont j'ai supprimé {{removed, list(conjunction)}} car j'ai perdu l'accès pour réagir avec eux.", 25 | "optionsIdName": "id", 26 | "optionsIdDescription": "Numéro de la suggestion à éditer", 27 | "optionsSuggestionName": "suggestion", 28 | "optionsSuggestionDescription": "La suggestion à afficher", 29 | "rePostNoContent": "Je n'ai pas pu publier le message en tant que suggestion parce qu'il n'a pas de contenu à copier." 30 | } 31 | -------------------------------------------------------------------------------- /src/locales/fr/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | { 2 | "modalTitle": "Soumettre une suggestion", 3 | "modalLabel": "Contenu" 4 | } 5 | -------------------------------------------------------------------------------- /src/locales/fr/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | { 2 | "contentAccepted": "Accepté par {{tag}} le {{time}}", 3 | "contentConsidered": "Considéré par {{tag}} le {{time}}", 4 | "contentDenied": "Refusé par {{tag}} le {{time}}", 5 | "updateFailure": "Je n'ai pas réussi à mettre à jour le contenu du message, désolé ! 😢", 6 | "updateSuccess": "Le message a été mis à jour avec succès !" 7 | } 8 | -------------------------------------------------------------------------------- /src/locales/fr/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | { 2 | "missingResolvePermissions": "Vous devez avoir le droit d'exécuter /resolve pour pouvoir utiliser ce bouton.", 3 | "modalTitle": "Suggestion #{{id}}", 4 | "modalFieldLabelAccept": "Message (Accepté)", 5 | "modalFieldLabelConsider": "Message (à considérer)", 6 | "modalFieldLabelDeny": "Message (Refusé)", 7 | "modalFieldPlaceholderAccept": "Il me semble que c'est une bonne chose parce que...", 8 | "modalFieldPlaceholderConsider": "Nous envisageons de le faire parce que...", 9 | "modalFieldPlaceholderDeny": "Je crains que nous ne le refusions car...", 10 | "archiveSuccess": "La suggestion a été archivée avec succès.", 11 | "archiveThreadFailure": "Je n'ai pas pu archiver le fil de discussion, désolé !", 12 | "reactionRemovalFailure": "La suppression de toutes les réactions a échoué, vous devrez peut-être les supprimer manuellement.", 13 | "archiveMessageFailure": "Je n'ai pas pu archiver le message, il a peut-être été supprimé.", 14 | "threadChannelCreationFailure": "Je n'ai pas pu créer le fil de discussion, il faudrait peut-être contacter un administrateur pour me donner des autorisations, ou un modérateur pour créer un fil de discussion, désolé ! 😢", 15 | "threadMessageUpdateSuccess": "Création du fil de discussion {{channel}} et suppression du bouton de fil de discussion dans le message de suggestion.", 16 | "threadMessageUpdateFailure": "J'ai réussi à créer le fil {{channel}}, mais j'ai eu un petit problème de mise à jour du message de suggestion, ce qui m'a empêché de supprimer le bouton. 😦", 17 | "threadMemberAddFailure": "De plus, je n'ai pas réussi à vous ajouter au fil de discussion, il se peut donc que vous deviez vous joindre manuellement. Désolé pour la gêne occasionnée.😦" 18 | } 19 | -------------------------------------------------------------------------------- /src/locales/fr/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "enabled": "Activé", 3 | "disabled": "Désactivé", 4 | "unset": "Non-défini", 5 | "none": "Aucun" 6 | } 7 | -------------------------------------------------------------------------------- /src/locales/hi/commands/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "कॉन्फिग", 3 | "description": "इस सर्वर के लिए कॉन्फ़िगरेशन प्रबंधित करें", 4 | "viewName": "देखें", 5 | "viewDescription": "वर्तमान कॉन्फ़िगरेशन देखें", 6 | "viewContent": "**वर्तमान सेटिंग्स**:\n\nचैनल: {{channel}}\nऑटो-थ्रेड: {{autoThread}}\nबटन: {{buttons}}\nकॉम्पैक्ट: {{compact}}\nकूलडाउन: {{cooldown}}\nप्रदर्शन अपडेट इतिहास: {{displayUpdateHistory}}\nएम्बेड करें: {{embed}}\nप्रतिक्रियाएं: {{reactions}}\n\n> **नोट**: उन्हें अपडेट करने के लिए, आप `/कॉन्फिग एडिट` का उपयोग कर सकते हैं।", 7 | "editName": "संपादन", 8 | "editDescription": "कॉन्फ़िगरेशन फ़ाइल संपादित करें", 9 | "editOptionsChannelDescription": "यदि सेट है, वह चैनल जहां नए सुझव पोस्ट करने हैं", 10 | "editOptionsAutoThreadDescription": "नए सुझाव संदेशों पर स्वचालित रूप से थ्रेड चैनल बनाना है या नहीं (डिफ़ॉल्ट: नहीं)", 11 | "editOptionsButtonsDescription": "नए सुझाव संदेशों पर प्रबंधन बटन जोड़ना है या नहीं (डिफ़ॉल्ट: हाँ)", 12 | "editOptionsCompactDescription": "नए सुझाव संदेशों पर कॉम्पैक्ट मोड का उपयोग करना है या नहीं (डिफ़ॉल्ट: नहीं)", 13 | "editOptionsCooldownDescription": "यदि सेट है, कूलडाउन अवधि इससे पहले कि उपयोगकर्ता कोई अन्य सुझाव पोस्ट कर सकें (डिफ़ॉल्ट: नहीं)", 14 | "editOptionsDisplayUpdateHistoryDescription": "सुझावों पर 3 अंतिम प्रतिक्रियाओं को प्रदर्शित करना है या नहीं (डिफ़ॉल्ट: नहीं)", 15 | "editOptionsEmbedDescription": "नए सुझाव संदेशों पर एम्बेड का उपयोग करना है या नहीं (डिफ़ॉल्ट: हाँ)", 16 | "editOptionsReactionsDescription": "नए सुझाव संदेशों पर उपयोग की जाने वाली प्रतिक्रियाएं, रिक्त स्थान द्वारा अलग किए गए 3 तक", 17 | "editOptionsRemoveReactionsDescription": "संग्रह पर सुझाव संदेशों से सभी प्रतिक्रियाओं को स्वचालित रूप से निकालना है या नहीं (डिफ़ॉल्ट: नहीं)", 18 | "editReactionsInvalidAmount": "मैं आपके उत्साह की सराहना करती हूं, लेकिन मैं 3 से अधिक प्रतिक्रियाओं को जोड़ना बरदाश्त नहीं कर सकती, इसलिए कृपया इसे अधिकतम 3 इमोजी तक रखें, क्षमा करें!", 19 | "editReactionsInvalidEmoji": "मैं एक मान्य इमोजी के लिए {{value}} पार्स नहीं कर सकी, कृपया दूसरे इमोजी के साथ फिर से कोशिश करें असुविधा के लिए खेद है 😦", 20 | "editCooldownInvalidDuration": "मैं {{value}} से अवधि की पुष्टि नहीं कर सकी, कृपया `2h` जैसे शब्दों का प्रयोग करके देखें।", 21 | "editCooldownDurationTooShort": "कूलडाउन 1 सेकंड से कम नहीं हो सकता।", 22 | "editCooldownDurationTooLong": "कूलडाउन 6 घंटे से अधिक नहीं हो सकता।", 23 | "resetName": "रीसेट", 24 | "resetDescription": "कॉन्फ़िगरेशन विकल्प को उसकी डिफ़ॉल्ट सेटिंग पर रीसेट", 25 | "resetOptionsKeyName": "मूल", 26 | "resetOptionsKeyDescription": "रीसेट करने का विकल्प", 27 | "resetOptionsKeyChoicesAll": "सब", 28 | "keyChannel": "चैनल", 29 | "keyAutoThread": "ऑटो-थ्रेड", 30 | "keyButtons": "बटन्स", 31 | "keyCompact": "काम्पैक्ट", 32 | "keyCooldown": "कूलडाउन", 33 | "keyDisplayUpdateHistory": "प्रदर्शन-अपडेट-इतिहास", 34 | "keyEmbed": "एम्बेड", 35 | "keyReactions": "प्रतिक्रियाएं", 36 | "keyRemoveReactions": "प्रतिक्रियाएं-हटाना", 37 | "editSuccess": "इस सर्वर के कॉन्फ़िगरेशन को सफलतापूर्वक संपादित किया गया।", 38 | "editFailure": "मैं आपके परिवर्तनों को सहेजने में सक्षम नहीं थी, क्षमा करें 😦" 39 | } 40 | -------------------------------------------------------------------------------- /src/locales/hi/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "मार्गदर्शक-प्रकाशित", 3 | "description": "नए सुझावों को प्रकाशित करने के तरीके पर एक मार्गदर्शिका पोस्ट करता है", 4 | "optionsHideName": "छुपाएं", 5 | "optionsHideDescription": "मार्गदर्शिका को छुपाया जाना चाहिए या नहीं", 6 | "optionsTargetName": "लक्ष्य", 7 | "optionsTargetDescription": "संदेश में उल्लेख करने के लिए उपयोगकर्ता, यदि कोई हो", 8 | "message": "एक नया सुझाव सबमिट करने के लिए, बस {{command}} कमांड का उपयोग {{bot}} के साथ करें, या संलग्न \"सुझाव सबमिट करें\" बटन पर क्लिक करें।\n\nआपका संदेश {{channel}} में पोस्ट किया जाएगा।", 9 | "buttonSubmit": "सुझाव सबमिट करें", 10 | "buttonSupport": "सहयोग सर्वर" 11 | } 12 | -------------------------------------------------------------------------------- /src/locales/hi/commands/resolve.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "समाधान", 3 | "description": "इस सर्वर से सुझावों का समाधान करता है", 4 | "archiveName": "आर्काइव", 5 | "archiveDescription": "इस सर्वर से एक सुझाव संग्रहित करें", 6 | "acceptName": "स्वीकारें", 7 | "acceptDescription": "इस सर्वर के किसी सुझाव को स्वीकृत के रूप में चिह्नित करें", 8 | "considerName": "विचारें", 9 | "considerDescription": "इस सर्वर से किसी सुझाव को माना गया के रूप में चिह्नित करें", 10 | "denyName": "अस्वीकारें", 11 | "denyDescription": "इस सर्वर से किसी सुझाव को अस्वीकृत के रूप में चिह्नित करें", 12 | "optionsIdName": "क्रमांक", 13 | "optionsIdDescription": "अद्यतन करने के लिए सुझाव क्रमांक", 14 | "optionsResponseName": "प्रतिक्रिया", 15 | "optionsResponseDescription": "सुझाव संदेश में जोड़ी जाने वाली प्रतिक्रिया", 16 | "notConfigured": "इस सर्वर में कोई सुझाव चैनल कॉन्फ़िगर नहीं है, कृपया इसे `/कॉन्फिग एडिट चैनल #चैनल` के साथ कॉन्फ़िगर करें या किसी ऐड्मिनिस्ट्रेटर से इसे करने के लिए कहें।", 17 | "suggestionArchived": "सुझाव संग्रहीत है और संपादित नहीं किया जा सकता है।", 18 | "suggestionIdDoesNotExist": "आपके द्वारा निर्दिष्ट सुझाव क्रमांक मौजूद नहीं है।", 19 | "suggestionMessageDeleted": "सुझाव का संदेश हटा दिया गया है, और इसलिए, इसे स्वचालित रूप से संग्रहीत कर दिया गया है।", 20 | "archiveSuccess": "सुझाव को सफलतापूर्वक संग्रहीत किया गया {{id}}.", 21 | "noReason": "*कोई कारण निर्दिष्ट नहीं*", 22 | "success": "सुझाव {{id}} को सफलतापूर्वक अपडेट किया गया।", 23 | "failure": "मैं सुझाव {{id}} को अपडेट नहीं कर पायी, क्षमा करें!" 24 | } 25 | -------------------------------------------------------------------------------- /src/locales/hi/commands/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "infoEmbedDescription": "Iriss सुझाव प्रबंधन में केंद्रित एक बॉट है। यह एक HTTP केवल बॉट है जो [Skyra HTTP Framework](https://www.npmjs.com/package/@skyra/http-framework) के शीर्ष पर बनाया गया हैं|" 3 | } 4 | -------------------------------------------------------------------------------- /src/locales/hi/commands/suggest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "सुझाएं", 3 | "description": "इस सर्वर के लिए एक नया सुझाव बनाएं", 4 | "postAsSuggestionName": "सुझाव के रूप में पोस्ट करें", 5 | "componentsAccept": "स्वीकारें", 6 | "componentsArchive": "आर्काइव", 7 | "componentsConsider": "विचारें", 8 | "componentsCreateThread": "थ्रेड बनाएं", 9 | "componentsDeny": "अस्वीकारें", 10 | "modifyArchived": "आप संग्रहीत सुझाव को संशोधित नहीं कर सकते हैं। आप इसे एक नए सुझाव के साथ संदर्भित कर सकते हैं।", 11 | "modifyDoesNotExist": "आपके द्वारा निर्दिष्ट सुझाव मौजूद नहीं है।", 12 | "modifyMessageDeleted": "ऐसा लगता है कि आप जिस सुझाव को संपादित करने का प्रयास कर रहे हैं उसे हटा दिया गया था, और इस तरह, स्वचालित रूप से संग्रहीत किया गया था। क्षमा करे!", 13 | "modifyMismatchingAuthor": "आप किसी और के सुझाव को संशोधित नहीं कर सकते।", 14 | "modifyNotConfigured": "इस सर्वर ने सुझाव चैनल को कॉन्फ़िगरेशन से हटा दिया है, और इसलिए, सभी सुझाव अब केवल-पढ़ने के लिए हैं। कृपया इस घटना के बारे में सर्वर के ऐड्मिनिस्ट्रेटर से संपर्क करें यदि यह काम करने वाला था।", 15 | "modifyReplied": "आप उस सुझाव को संशोधित नहीं कर सकते जिसका उत्तर दिया गया था। आप चर्चा चैनल में इसका अनुसरण कर सकते हैं।", 16 | "modifySuccess": "आपका सुझाव सफलतापूर्वक अपडेट किया गया (`#{{id}}`)!", 17 | "cooldown": "कूलडाउन के कारण {{time}} तक आपको इस कमांड का उपयोग करने से अवरोधित किया गया है।", 18 | "newMessageContent": "[`#{{id}}`] **{{user.mention}} ने {{timestamp}} को सुझाव दिया**:\n{{message}}", 19 | "newMessageEmbedTitle": "#{{id}} - {{user.tag}} ({{user.id}})", 20 | "newFailedToSend": "मुझे खेद है, लेकिन मैं {{channel}} में संदेश पोस्ट करने में सक्षम नहीं थी। कृपया इस समस्या की रिपोर्ट किसी ऐड्मिनिस्ट्रेटर को करें. 😦", 21 | "newNotConfigured": "इस सर्वर ने अभी तक सुझाव चैनल को कॉन्फ़िगर नहीं किया है। इसे स्थापित करने के लिए कृपया ऐड्मिनिस्ट्रेटरो से संपर्क करें!", 22 | "newSuccess": "आपका सुझाव सफलतापूर्वक भेज दिया गया (`#{{id}}`)!", 23 | "reactionsFailed": "मैं {{failed, list(conjunction)}} जोड़ने में सक्षम नहीं थी।", 24 | "reactionsFailedAndRemoved": "मैं {{failed, list(conjunction)}} जोड़ने में सक्षम नहीं थी, जिसमें से मैंने {{removed, list(conjunction)}} हटा दिया, क्योंकि मैंने उनसे प्रतिक्रिया करने की पहुँच खो दी थी।", 25 | "optionsIdName": "क्रमांक", 26 | "optionsIdDescription": "सम्पादित करने के लिये सुझाव का क्रमांक", 27 | "optionsSuggestionName": "सुझाव", 28 | "optionsSuggestionDescription": "पोस्ट करने का सुझाव", 29 | "rePostNoContent": "मैं संदेश को सुझाव के रूप में पोस्ट नहीं कर सकी क्योंकि इसमें कॉपी करने के लिए कोई सामग्री नहीं है।" 30 | } 31 | -------------------------------------------------------------------------------- /src/locales/hi/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | { 2 | "modalTitle": "सुझाव सबमिट करें", 3 | "modalLabel": "कांटेंट" 4 | } 5 | -------------------------------------------------------------------------------- /src/locales/hi/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | { 2 | "contentAccepted": "{{tag}} द्वारा {{time}} को स्वीकार किया गया", 3 | "contentConsidered": "{{tag}} द्वारा {{time}} को माना गया", 4 | "contentDenied": "{{tag}} द्वारा {{time}} को अस्वीकार किया गया", 5 | "updateFailure": "मैं संदेश की सामग्री को अपडेट करने में विफल रही, क्षमा करें! 😢", 6 | "updateSuccess": "संदेश को सफलतापूर्वक अपडेट किया गया!" 7 | } 8 | -------------------------------------------------------------------------------- /src/locales/hi/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | { 2 | "missingResolvePermissions": "इस बटन का उपयोग करने के लिए आपके पास /समाधान निष्पादित करने की अनुमति होनी चाहिए।", 3 | "modalTitle": "सुझाव #{{id}}", 4 | "modalFieldLabelAccept": "संदेश (स्वीकार)", 5 | "modalFieldLabelConsider": "संदेश (विचार)", 6 | "modalFieldLabelDeny": "संदेश (अस्वीकार)", 7 | "modalFieldPlaceholderAccept": "मुझे अच्छा लगता है क्योंकि...", 8 | "modalFieldPlaceholderConsider": "हम इस पर विचार कर रहे हैं क्योंकि...", 9 | "modalFieldPlaceholderDeny": "हम इससे अस्वीकार कर रहे हैं क्योंकि...", 10 | "archiveSuccess": "सुझाव को सफलतापूर्वक संग्रहीत कर लिया गया है।", 11 | "archiveThreadFailure": "मैं लिंक किए गए थ्रेड को संग्रहित करने में असमर्थ थी, क्षमा करें!", 12 | "reactionRemovalFailure": "सभी प्रतिक्रियाओं को निकालना विफल रहा, आपको उन्हें मैन्युअल रूप से निकालने की आवश्यकता हो सकती है।", 13 | "archiveMessageFailure": "मैं संदेश को संग्रहीत करने में सक्षम नहीं थी, हो सकता है कि इसे हटा दिया गया हो।", 14 | "threadChannelCreationFailure": "मैं थ्रेड बनाने में सक्षम नहीं थी, मुझे अनुमति देने के लिए आपको किसी ऐडमिनिस्ट्रेटर से संपर्क करना पड़ सकता है, या थ्रेड बनाने के लिए मॉडरेटर से संपर्क करना पड़ सकता है, क्षमा करें! 😢", 15 | "threadMessageUpdateSuccess": "थ्रेड {{channel}} को सफलतापूर्वक बनाया गया और सुझाव संदेश से थ्रेड बटन को हटा दिया गया|", 16 | "threadMessageUpdateFailure": "मैं सफलतापूर्वक थ्रेड {{channel}} बनाने में सक्षम थी, हालांकि, सुझाव संदेश को अपडेट करने में मुझे एक छोटी सी समस्या थी, इसलिए मैं बटन को निकालने में सक्षम नहीं थी। 😦", 17 | "threadMemberAddFailure": "साथ ही, मैं आपको थ्रेड में जोड़ने में असमर्थ थी, इसलिए आपको मैन्युअल रूप से शामिल होने की आवश्यकता हो सकती है। असुविधा के लिए खेद है। 😦" 18 | } 19 | -------------------------------------------------------------------------------- /src/locales/hi/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "enabled": "सक्षम", 3 | "disabled": "अक्षम", 4 | "unset": "सेट नहीं", 5 | "none": "कोई नहीं" 6 | } 7 | -------------------------------------------------------------------------------- /src/locales/hr/commands/config.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/hr/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/hr/commands/resolve.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/hr/commands/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/hr/commands/suggest.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/hr/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/hr/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/hr/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/hr/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/hu/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/hu/commands/resolve.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "megold", 3 | "description": "Megoldja a javaslatokat erről a szerverről", 4 | "archiveName": "archivál", 5 | "archiveDescription": "Egy javaslat archiválása erről a szerverről", 6 | "acceptName": "elfogad", 7 | "acceptDescription": "Jelöljon meg egy szervertől származó javaslatot elfogadottként", 8 | "considerName": "fontolgat", 9 | "considerDescription": "A szervertől származó egy javaslat megjelölése megfontoltként", 10 | "denyName": "elutasítás", 11 | "denyDescription": "A szervertől származó egy javaslat megjelölése elutasítottként", 12 | "optionsIdName": "azonosító", 13 | "optionsIdDescription": "A frissítésre vonatkozó javaslat azonosítója", 14 | "optionsResponseName": "válasz", 15 | "optionsResponseDescription": "A javaslat üzenethez hozzáadandó válasz", 16 | "notConfigured": "Ezen a szerveren nincs beállítva egy javaslati csatorna, kérjük, állítsa be a `/konfiguráció szerkesztés csatorna #channel` paranccsal, vagy kérjen meg egy adminisztrátort, hogy tegye meg.", 17 | "suggestionArchived": "A javaslat archiválva van, és nem szerkeszthető.", 18 | "suggestionIdDoesNotExist": "Az Ön által megadott javaslatazonosító nem létezik.", 19 | "suggestionMessageDeleted": "A javaslat üzenete törölve lett, ezért automatikusan archiválva lett.", 20 | "archiveSuccess": "A(z) {{id}} javaslat sikeresen archiválva.", 21 | "noReason": "*Nincs megadva ok*", 22 | "success": "A(z) {{id}} javaslat sikeresen frissítve.", 23 | "failure": "Nem tudtam frissíteni a(z) {{id}} javaslatot, bocsi!" 24 | } 25 | -------------------------------------------------------------------------------- /src/locales/hu/commands/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "infoEmbedDescription": "Az Iriss egy olyan bot, amely a javaslatkezelésre összpontosít. Ez egy kizárólag HTTP-alapú bot, amely a [Skyra HTTP Framework](https://www.npmjs.com/package/@skyra/http-framework) tetejére épül." 3 | } 4 | -------------------------------------------------------------------------------- /src/locales/hu/commands/suggest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "javasol", 3 | "description": "Hozzon létre egy új javaslatot ehhez a szerverhez", 4 | "postAsSuggestionName": "Tegye közzé javaslatként", 5 | "componentsAccept": "Elfogad", 6 | "componentsArchive": "Archivál", 7 | "componentsConsider": "Fontold meg", 8 | "componentsCreateThread": "Gondolatmenet létrehozása", 9 | "componentsDeny": "Elutasítás", 10 | "modifyArchived": "Egy archivált javaslat nem módosítható. Új javaslattal hivatkozhat rá.", 11 | "modifyDoesNotExist": "Az Ön által megadott javaslat nem létezik.", 12 | "modifyMessageDeleted": "Úgy tűnik, hogy a szerkeszteni kívánt javaslatot törölték, és automatikusan archiválva lett. Bocsi!", 13 | "modifyMismatchingAuthor": "Nem módosíthatja valaki más javaslatát.", 14 | "modifyNotConfigured": "Ez a szerver eltávolította a javaslatok csatornáját a konfigurációból, így az összes javaslat csak olvasható. Kérjük, lépjen kapcsolatba a szerver adminisztrátorokal ezzel az incidenssel kapcsolatban, ha ennek működnie kellett.", 15 | "modifyReplied": "Egy megválaszolt javaslatot nem módosíthatja. Ezt a megbeszélés csatornán lehet követni.", 16 | "modifySuccess": "Javaslata sikeresen frissítve (`#{{id}}`)!", 17 | "cooldown": "A lehűlési idő miatt le van tiltva ennek a parancsnak a használata a következő időpontig: {{time}}.", 18 | "newMessageContent": "[`#{{id}}`] **{{user.mention}} javasolt ekkor: {{timestamp}}**:\n{{message}}", 19 | "newMessageEmbedTitle": "#{{id}} - {{user.tag}} ({{user.id}})", 20 | "newFailedToSend": "Sajnálom, de nem tudtam üzenetet küldeni a(z) {{channel}} csatornán. Kérlek, jelentse ezt a problémát egy adminisztrátornak. 😦", 21 | "newNotConfigured": "Ez a szerver még nem konfigurálta a javaslatok csatornáját. A beállításhoz forduljon a adminisztrátorokhoz!", 22 | "newSuccess": "A javaslatot sikeresen elküldtük (`#{{id}}`)!", 23 | "reactionsFailed": "Nem tudtam hozzáadni a következőt: {{failed, list(conjunction)}}.", 24 | "reactionsFailedAndRemoved": "Nem tudtam hozzáadni a(z) {{failed, list(conjunction)}} elemet, amelyből eltávolítottam a(z) {{removed, list(conjunction)}} elemet, mivel elvesztettem a hozzáférést, hogy reagálhassak velük.", 25 | "optionsIdName": "azonosító", 26 | "optionsIdDescription": "A szerkesztendő javaslat száma", 27 | "optionsSuggestionName": "javaslat", 28 | "optionsSuggestionDescription": "A feladandó javaslat", 29 | "rePostNoContent": "Nem tudtam javaslatként közzétenni az üzenetet, mert nincs benne másolási tartalom." 30 | } 31 | -------------------------------------------------------------------------------- /src/locales/hu/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/hu/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | { 2 | "contentAccepted": "Elfogadva {{tag}} ekkor: {{time}}", 3 | "contentConsidered": "{{tag}} figyelembe vette ekkor: {{time}}", 4 | "contentDenied": "Elutasította {{tag}} ekkor: {{time}}", 5 | "updateFailure": "Nem sikerült frissíteni az üzenet tartalmát, bocsi! 😢", 6 | "updateSuccess": "Az üzenet sikeresen frissítve!" 7 | } 8 | -------------------------------------------------------------------------------- /src/locales/hu/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | { 2 | "missingResolvePermissions": "A gomb használatához jogosultságokkal kell rendelkeznie a /megold futtatásához.", 3 | "modalTitle": "#{{id}} javaslat", 4 | "modalFieldLabelAccept": "Üzenet (elfogadás)", 5 | "modalFieldLabelConsider": "Üzenet (megfontolandó)", 6 | "modalFieldLabelDeny": "Üzenet (elutasítás)", 7 | "modalFieldPlaceholderAccept": "Nekem jól néz ki, mert...", 8 | "modalFieldPlaceholderConsider": "Ezt fontolgatjuk, mert...", 9 | "modalFieldPlaceholderDeny": "Attól tartok, ezt elutasítjuk, mert...", 10 | "archiveSuccess": "A javaslat archiválása sikeresen megtörtént.", 11 | "archiveThreadFailure": "Nem tudtam archiválni a linkelt gondolatmenetet, bocsi!", 12 | "reactionRemovalFailure": "Az összes reakció eltávolítása nem sikerült, előfordulhat, hogy manuálisan kell eltávolítania őket.", 13 | "archiveMessageFailure": "Nem tudtam archiválni az üzenetet, lehet, hogy törölték.", 14 | "threadChannelCreationFailure": "Nem tudtam létrehozni egy gondolatmenetet, előfordulhat, hogy kapcsolatba kell lépnie egy adminisztrátorral, hogy engedélyt adjon nekem, vagy egy moderátorhoz kell fordulnia a szál létrehozásához, bocsi' 😢", 15 | "threadMessageUpdateSuccess": "Sikeresen létrehozta a(z) {{channel}} gondolatmenetet, és eltávolította a gondolatmenet gombot a javaslat üzenetéből.", 16 | "threadMessageUpdateFailure": "Sikeresen létrehoztam a(z) {{channel}} gondolatmenetet, azonban egy kis problémám akadt a javaslat üzenet frissítése során, így nem tudtam eltávolítani a gombot. 😦", 17 | "threadMemberAddFailure": "Ezenkívül nem tudtalak hozzáadni a gondolatmenet hez, ezért lehet, hogy manuálisan kell csatlakoznod. Elnézést a kellemetlenségért. 😦" 18 | } 19 | -------------------------------------------------------------------------------- /src/locales/hu/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "enabled": "Engedélyezett", 3 | "disabled": "Letiltva", 4 | "unset": "Nincs beállítva", 5 | "none": "Semmi" 6 | } 7 | -------------------------------------------------------------------------------- /src/locales/id/commands/config.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/id/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/id/commands/resolve.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/id/commands/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/id/commands/suggest.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/id/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/id/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/id/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/id/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/it/commands/config.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/it/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/it/commands/resolve.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/it/commands/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/it/commands/suggest.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/it/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/it/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/it/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/it/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/ja/commands/config.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/ja/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/ja/commands/resolve.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/ja/commands/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/ja/commands/suggest.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/ja/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/ja/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/ja/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/ja/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/ko/commands/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "설정", 3 | "description": "서버 설정 변경하기", 4 | "viewName": "보기", 5 | "viewDescription": "현재 설정 보기", 6 | "editName": "변경", 7 | "editDescription": "설정값 변경", 8 | "editOptionsChannelDescription": "설정되었다면, 새 제안을 보낼 채널", 9 | "editOptionsAutoThreadDescription": "새 제안 메세지에 자동으로 새로운 스레드 생성 (기본값: 거짓)", 10 | "editOptionsButtonsDescription": "새 제안 메세지에 관리 버튼 추가 (기본값: 참)", 11 | "editOptionsCompactDescription": "새 제안 메세지에 콤팩트 모드 사용 (기본값: 거짓)", 12 | "editOptionsDisplayUpdateHistoryDescription": "제안 메세지에 최근 답변 3개까지 표시 (기본값: 거짓)", 13 | "editOptionsEmbedDescription": "새 제안 메세지에 임베드 사용 (기본값: 참)", 14 | "editOptionsReactionsDescription": "설정되었다면, 새 제안 메세지에 사용할 반응 (3개까지, 공백으로 분리)", 15 | "editOptionsRemoveReactionsDescription": "제안 메세지 보관 시 모든 반응 제거 (기본값: 참)", 16 | "editReactionsInvalidAmount": "죄송해요! 반응은 최대 3개까지만 추가할 수 있어요.", 17 | "editReactionsInvalidEmoji": "{{value}}를 이모티콘으로 변환하지 못했어요. 다른 이모티콘으로 다시 시도해주세요.", 18 | "resetName": "초기화", 19 | "resetDescription": "설정값 초기화", 20 | "resetOptionsKeyName": "값", 21 | "resetOptionsKeyDescription": "초기화할 설정값", 22 | "resetOptionsKeyChoicesAll": "전체", 23 | "keyChannel": "채널", 24 | "keyAutoThread": "자동-스레드", 25 | "keyButtons": "버튼", 26 | "keyCompact": "콤팩트", 27 | "keyDisplayUpdateHistory": "업데이트-내역-표시", 28 | "keyEmbed": "임베드", 29 | "keyReactions": "반응", 30 | "keyRemoveReactions": "반응-제거", 31 | "editSuccess": "서버의 설정값을 성공적으로 변경했어요.", 32 | "editFailure": "변경값을 저장하지 못했어요. 죄송해요 😦" 33 | } 34 | -------------------------------------------------------------------------------- /src/locales/ko/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/ko/commands/resolve.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "해결", 3 | "description": "서버의 제안 해결", 4 | "archiveName": "보관", 5 | "archiveDescription": "서버의 제안 보관", 6 | "acceptName": "수락", 7 | "acceptDescription": "서버의 제안을 '수락'으로 표시", 8 | "considerName": "심리", 9 | "considerDescription": "서버의 제안을 '심리'로 표시", 10 | "denyName": "거절", 11 | "denyDescription": "서버의 제안을 '거절'로 표시", 12 | "optionsIdName": "번호", 13 | "optionsIdDescription": "수정할 제안 번호", 14 | "optionsResponseName": "응답", 15 | "optionsResponseDescription": "제안 메세지에 추가될 응답", 16 | "notConfigured": "서버의 제안 채널이 설정되지 않았어요. `/설정 편집 채널 #채널`로 설정하거나 관리자에게 요청하세요.", 17 | "suggestionArchived": "제안이 보관돼서 수정할 수 없어요.", 18 | "suggestionIdDoesNotExist": "그 번호의 제안이 존재하지 않아요.", 19 | "suggestionMessageDeleted": "제안 메세지가 삭제되어서 자동으로 보관되었어요.", 20 | "archiveSuccess": "{{id}}번 제안을 성공적으로 보관했어요.", 21 | "noReason": "*이유 제시되지 않음*", 22 | "success": "{{id}}번 제안을 성공적으로 수정했어요.", 23 | "failure": "{{id}}번 제안을 수정하지 못했어요." 24 | } 25 | -------------------------------------------------------------------------------- /src/locales/ko/commands/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "infoEmbedDescription": "Iriss는 제안사항 관리에 집중된 봇이에요. [Skyra HTTP 프레임워크](https://www.npmjs.com/package/@skyra/http-framework)를 사용해 만들어졌어요." 3 | } 4 | -------------------------------------------------------------------------------- /src/locales/ko/commands/suggest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "제안", 3 | "description": "서버에 새 제안 생성", 4 | "componentsAccept": "수락", 5 | "componentsArchive": "보관", 6 | "componentsConsider": "심리", 7 | "componentsCreateThread": "스레드 생성", 8 | "componentsDeny": "거절", 9 | "modifyArchived": "보관된 제안은 수정할 수 없어요. 하지만, 새 제안으로 참조할 수 있어요.", 10 | "modifyDoesNotExist": "그 제안이 존재하지 않아요.", 11 | "modifyMessageDeleted": "수정하려던 제안이 삭제돼서 자동으로 보관된 것 같아요. 죄송해요!", 12 | "modifyMismatchingAuthor": "다른 사람의 제안을 수정 할 수 없어요.", 13 | "modifyNotConfigured": "서버 설정에서 제안 채널이 제거되어서, 모든 제안이 읽기 전용이에요. 정상 작동이 아니라면 서버 관리자에게 연락해주세요.", 14 | "modifyReplied": "답변된 제안은 수정 할 수 없어요. 의논 채널에서 참조 할 수 있어요.", 15 | "modifySuccess": "(`#{{id}}`)번 제안을 성공적으로 수정했어요!", 16 | "newMessageContent": "[`#{{id}}`] **{{timestamp}}에 {{user.mention}}이(가) 제안**:\n{{message}}", 17 | "newMessageEmbedTitle": "#{{id}} - {{user.tag}} ({{user.id}})", 18 | "newFailedToSend": "{{channel}}에 메세지를 보내지 못했어요. 관리자에게 이 문제를 보고해주세요 😦", 19 | "newNotConfigured": "서버의 제안 채널이 설정되지 않았어요. 관리자들에게 설정을 부탁해주세요!", 20 | "newSuccess": "(`#{{id}}`)번 제안을 성공적으로 보냈어요!", 21 | "reactionsFailed": "{{failed, list(conjunction)}}을 추가하지 못했어요.", 22 | "reactionsFailedAndRemoved": "반응 할 권한을 잃어서 {{removed, list(conjunction)}}을 제거한 {{failed, list(conjunction)}}을 추가하지 못했어요.", 23 | "optionsIdName": "번호", 24 | "optionsIdDescription": "수정할 제안의 번호", 25 | "optionsSuggestionName": "제안", 26 | "optionsSuggestionDescription": "보낼 제안" 27 | } 28 | -------------------------------------------------------------------------------- /src/locales/ko/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/ko/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | { 2 | "contentAccepted": "{{time}}에 {{tag}}가 수락", 3 | "contentConsidered": "{{time}}에 {{tag}}가 심리", 4 | "contentDenied": "{{time}}에 {{tag}}가 거절", 5 | "updateFailure": "메세지를 수정하지 못했어요. 죄송해요! 😢", 6 | "updateSuccess": "메세지를 수정했어요." 7 | } 8 | -------------------------------------------------------------------------------- /src/locales/ko/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | { 2 | "missingResolvePermissions": "/해결을 사용할 권한이 있어야 이 버튼을 사용할 수 있어요.", 3 | "modalTitle": "#{{id}}번 제안", 4 | "modalFieldLabelAccept": "메세지 (수락)", 5 | "modalFieldLabelConsider": "메세지 (심리)", 6 | "modalFieldLabelDeny": "메세지 (거절)", 7 | "modalFieldPlaceholderAccept": "...때문에 수락해야 할 것 같아요.", 8 | "modalFieldPlaceholderConsider": "...때문에 심리해야 할 것 같아요.", 9 | "modalFieldPlaceholderDeny": "...때문에 거절해야 할 것 같아요.", 10 | "archiveSuccess": "제안이 성공적으로 보관됐어요.", 11 | "archiveThreadFailure": "스레드를 보관하지 못했어요. 죄송해요!", 12 | "reactionRemovalFailure": "반응 제거에 실패했어요. 직접 제거하셔야 할 수도 있어요.", 13 | "archiveMessageFailure": "메세지를 보관하지 못했어요. 메세지가 삭제됐을 수도 있어요.", 14 | "threadChannelCreationFailure": "스레드를 생성하지 못했어요. 권한을 주시거나, 관리자에게 연락해주세요. 죄송해요! 😢", 15 | "threadMessageUpdateSuccess": "{{channel}} 스레드를 생성하고 제안 메세지에서 스레드 버튼을 제거했어요.", 16 | "threadMessageUpdateFailure": "{{channel}} 스레드를 성공적으로 생성했지만, 제안 메세지를 수정하지 못해 스레드 버튼을 제거하지 못했어요. 😦", 17 | "threadMemberAddFailure": "스레드에 당신을 추가할 수 없어서, 직접 들어오셔야 할 수도 있어요. 죄송해요 😦" 18 | } 19 | -------------------------------------------------------------------------------- /src/locales/ko/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "enabled": "활성화됨", 3 | "disabled": "비활성화됨", 4 | "unset": "설정되지 않음", 5 | "none": "없음" 6 | } 7 | -------------------------------------------------------------------------------- /src/locales/lt/commands/config.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/lt/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/lt/commands/resolve.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/lt/commands/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/lt/commands/suggest.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/lt/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/lt/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/lt/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/lt/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/nl/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "post-gids", 3 | "description": "Plaatst een handleiding over het publiceren van nieuwe suggesties", 4 | "optionsHideName": "verbergen", 5 | "optionsHideDescription": "Of de gids al dan niet verborgen moet worden", 6 | "optionsTargetName": "doel", 7 | "optionsTargetDescription": "De gebruiker om te vermelden in het bericht, indien van toepassing", 8 | "message": "Om een nieuwe suggestie in te dienen, gebruik het {{command}} commando met {{bot}}, of klik op de knop \"Suggestie indienen\".\n\nJe bericht wordt geplaatst in {{channel}}.", 9 | "buttonSubmit": "Suggestie indienen", 10 | "buttonSupport": "Ondersteunings Server" 11 | } 12 | -------------------------------------------------------------------------------- /src/locales/nl/commands/resolve.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sluiten", 3 | "description": "Sluit de suggestie in deze server", 4 | "archiveName": "archiveren", 5 | "archiveDescription": "Archiveer een suggestie in deze server", 6 | "acceptName": "accepteren", 7 | "acceptDescription": "Markeer een suggestie van deze server als geaccepteerd", 8 | "considerName": "overwegen", 9 | "considerDescription": "Markeer een suggestie van deze server als overwogen", 10 | "denyName": "afwijzen", 11 | "denyDescription": "Markeer een suggestie van deze server als afgewezen", 12 | "optionsIdName": "id", 13 | "optionsIdDescription": "Het ID van de te bijwerken suggestie", 14 | "optionsResponseName": "antwoord", 15 | "optionsResponseDescription": "Het antwoord dat moet worden toegevoegd aan de suggestie", 16 | "notConfigured": "Deze server heeft geen suggesties-kanaal geconfigureerd, configureer deze met `/configuratie aanpassen kanaal #kanaal` of vraag een beheerder om dit te doen.", 17 | "suggestionArchived": "De suggestie is gearchiveerd en kan niet worden gewijzigd.", 18 | "suggestionIdDoesNotExist": "De opgegeven suggestie-ID bestaat niet.", 19 | "suggestionMessageDeleted": "Het bericht van de suggestie is verwijderd en daarom is het automatisch gearchiveerd.", 20 | "archiveSuccess": "De suggestie {{id}} is succesvol gearchiveerd.", 21 | "noReason": "*Geen reden opgegeven*", 22 | "success": "De suggestie {{id}} is succesvol bijgewerkt.", 23 | "failure": "Het is me niet gelukt om de suggestie {{id}} bij te werken, sorry!" 24 | } 25 | -------------------------------------------------------------------------------- /src/locales/nl/commands/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "infoEmbedDescription": "Iriss is een bot voor suggestiebeheer. Dit is een HTTP-bot gebouwd met [Skyra HTTP-Framework](https://www.npmjs.com/package/@skyra/http-framework)." 3 | } 4 | -------------------------------------------------------------------------------- /src/locales/nl/commands/suggest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "suggereren", 3 | "description": "Een nieuwe suggestie voor deze server maken", 4 | "postAsSuggestionName": "Verstuur als suggestie", 5 | "componentsAccept": "Accepteren", 6 | "componentsArchive": "Archiveren", 7 | "componentsConsider": "Overwegen", 8 | "componentsCreateThread": "Maak thread", 9 | "componentsDeny": "Afwijzen", 10 | "modifyArchived": "Je kunt een suggestie die gearchiveerd is niet wijzigen. Je kunt deze met een nieuwe suggestie refereren.", 11 | "modifyDoesNotExist": "De door u opgegeven suggestie bestaat niet.", 12 | "modifyMessageDeleted": "Het lijkt erop dat de suggestie die je probeert te bewerken is verwijderd en is daarom automatisch gearchiveerd. Sorry!", 13 | "modifyMismatchingAuthor": "Je kunt de suggestie van iemand anders niet wijzigen.", 14 | "modifyNotConfigured": "Deze server heeft het suggestie kanaal uit de configuratie verwijderd en daarom zijn alle suggesties nu alleen-lezen. Neem contact op met de beheerders over dit incident als dit had moeten werken.", 15 | "modifyReplied": "Je kunt een geantwoorde suggestie niet wijzigen. Je kunt het in het discussiekanaal opvolgen.", 16 | "modifySuccess": "Je suggestie is succesvol gewijzigd (`#{{id}}`)!", 17 | "cooldown": "Tot {{time}} ben je niet in staat dit commando te gebruiken als gevolg van een cooldown.", 18 | "newMessageContent": "[`#{{id}}`] **{{user.mention}} suggereert op {{timestamp}}**:\n{{message}}", 19 | "newMessageEmbedTitle": "#{{id}} - {{user.tag}} ({{user.id}})", 20 | "newFailedToSend": "Het spijt me, maar ik kon geen bericht plaatsen in {{channel}}. Rapporteer dit probleem alstublieft aan een beheerder. 😦", 21 | "newNotConfigured": "Deze server heeft het suggestiekanaal nog niet geconfigureerd. Neem contact op met de beheerders om deze in te stellen!", 22 | "newSuccess": "Je suggestie is succesvol verstuurd (`#{{id}}`)!", 23 | "reactionsFailed": "Ik kon {{failed, list(conjunction)}} niet toevoegen.", 24 | "reactionsFailedAndRemoved": "Ik kon geen {{failed, list(conjunction)}} toevoegen, waaruit ik {{removed, list(conjunction)}} heb verwijderd, omdat ik de toegang heb verloren om te reageren.", 25 | "optionsIdName": "id", 26 | "optionsIdDescription": "Het nummer van de suggestie om te bewerken", 27 | "optionsSuggestionName": "suggestie", 28 | "optionsSuggestionDescription": "De suggestie om te verzenden", 29 | "rePostNoContent": "Ik kon het bericht niet als suggestie plaatsen, omdat het geen inhoud heeft om over te nemen." 30 | } 31 | -------------------------------------------------------------------------------- /src/locales/nl/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | { 2 | "modalTitle": "Suggestie indienen", 3 | "modalLabel": "Inhoud" 4 | } 5 | -------------------------------------------------------------------------------- /src/locales/nl/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | { 2 | "contentAccepted": "Geaccepteerd door {{tag}} op {{time}}", 3 | "contentConsidered": "Overwogen door {{tag}} op {{time}}", 4 | "contentDenied": "Afgewezen door {{tag}} op {{time}}", 5 | "updateFailure": "Het is niet gelukt om de inhoud van het bericht bij te werken, sorry! 😢", 6 | "updateSuccess": "Het bericht is succesvol bijgewerkt!" 7 | } 8 | -------------------------------------------------------------------------------- /src/locales/nl/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | { 2 | "missingResolvePermissions": "U moet machtigingen hebben voor het uitvoeren van /oplossen om deze knop te gebruiken.", 3 | "modalTitle": "Suggestie #{{id}}", 4 | "modalFieldLabelAccept": "Bericht (Accepteren)", 5 | "modalFieldLabelConsider": "Bericht (Overwegen)", 6 | "modalFieldLabelDeny": "Bericht (Afwijzen)", 7 | "modalFieldPlaceholderAccept": "Het lijkt me goed omdat...", 8 | "modalFieldPlaceholderConsider": "We overwegen dit omdat...", 9 | "modalFieldPlaceholderDeny": "Ik vrees dat we dit afwijzen omdat...", 10 | "archiveSuccess": "De suggestie is succesvol gearchiveerd.", 11 | "archiveThreadFailure": "Ik kon het gekoppelde thread niet archiveren, sorry!", 12 | "reactionRemovalFailure": "Het verwijderen van alle reacties is mislukt, je moet ze misschien handmatig verwijderen.", 13 | "archiveMessageFailure": "Ik kon het bericht niet archiveren, misschien is het al verwijderd.", 14 | "threadChannelCreationFailure": "Ik kon geen thread aanmaken, je kan contact opnemen met een beheerder om mij machtigingen te geven of aan een moderator vragen om een thread aan te maken, sorry! 😢", 15 | "threadMessageUpdateSuccess": "Met succes de thread {{channel}} aangemaakt en de thread aanmaken knop verwijderd van het suggestie bericht.", 16 | "threadMessageUpdateFailure": "Ik kon met succes de thread {{channel}} aanmaken, maar ik heb een fout gekregen met het bijwerken van het suggestie bericht, dus ik kon de knop om een nieuw thread aan te maken niet verwijderen. 😦", 17 | "threadMemberAddFailure": "Ook kon ik jou niet automatisch toevoegen aan de thread, wellicht wil je nog handmatig joinen. Sorry voor het ongemak. 😦" 18 | } 19 | -------------------------------------------------------------------------------- /src/locales/nl/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "enabled": "Geactiveerd", 3 | "disabled": "Gedeactiveerd", 4 | "unset": "Uitzetten", 5 | "none": "Geen" 6 | } 7 | -------------------------------------------------------------------------------- /src/locales/no/commands/config.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/no/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/no/commands/resolve.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/no/commands/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/no/commands/suggest.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/no/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/no/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/no/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/no/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/pl/commands/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ustawienia", 3 | "description": "Zarządzaj ustawieniami tego serwera", 4 | "viewName": "wyświetl", 5 | "viewDescription": "Wyświetl bieżące ustawienia", 6 | "editName": "edytuj", 7 | "editDescription": "Zmień opcję", 8 | "editOptionsChannelDescription": "Jeśli jest ustawiony, kanał do publikowania nowych sugestii", 9 | "editOptionsAutoThreadDescription": "Czy automatycznie tworzyć wątek dla nowych sugestii (domyślnie: Fałsz)", 10 | "editOptionsButtonsDescription": "Czy dodawać przyciski zarządzania do nowych sugestii (domyślnie: Prawda)", 11 | "editOptionsCompactDescription": "Czy używać trybu kompaktowego dla nowych sugestii (domyślnie: Fałsz)", 12 | "editOptionsDisplayUpdateHistoryDescription": "Czy wyświetlać 3 ostatnie odpowiedzi na sugestiach (domyślnie: Fałsz)", 13 | "editOptionsEmbedDescription": "Czy wstawiać embed w wiadomościach dla nowych sugestii (domyślnie: Prawda)", 14 | "editOptionsReactionsDescription": "Jeśli ustawione, reakcje do dodania do nowej sugestii. Maksymalnie 3, rozdzielone spacją", 15 | "editOptionsRemoveReactionsDescription": "Czy automatycznie usuwać reakcje z sugestii w momencie archiwizacji (domyślnie: Fałsz)", 16 | "editReactionsInvalidAmount": "Doceniam entuzjazm, ale niestety nie jestem w stanie dodać więcej niż 3 reakcje, przez co muszę prosić o nieprzekraczanie tego limitu!", 17 | "editReactionsInvalidEmoji": "Nie udało mi się użyć {{value}}, aby znaleźć emoji, spróbuj ponownie z czymś innym. Przepraszam za utrudnienia 😦", 18 | "resetName": "zresetuj", 19 | "resetDescription": "Zresetuj opcję do wartości domyślnej", 20 | "resetOptionsKeyName": "opcja", 21 | "resetOptionsKeyDescription": "Opcja do zresetowania", 22 | "resetOptionsKeyChoicesAll": "wszystko", 23 | "keyChannel": "kanał", 24 | "keyAutoThread": "auto-wątek", 25 | "keyButtons": "przyciski", 26 | "keyCompact": "tryb-kompaktowy", 27 | "keyDisplayUpdateHistory": "wyświetlanie-historii", 28 | "keyEmbed": "embed", 29 | "keyReactions": "reakcje", 30 | "keyRemoveReactions": "usuń-reakcje", 31 | "editSuccess": "Pomyślnie edytowano konfigurację serwera.", 32 | "editFailure": "Nie udało mi się zapisać Twoich zmian, przykro mi 😦" 33 | } 34 | -------------------------------------------------------------------------------- /src/locales/pl/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/pl/commands/resolve.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rozwiąż", 3 | "description": "Rozwiąż sugestię z tego serwera", 4 | "archiveName": "zarchiwizuj", 5 | "archiveDescription": "Zarchiwizuj sugestię z tego serwera", 6 | "acceptName": "zaakceptuj", 7 | "acceptDescription": "Oznacz sugestię z tego serwera jako zaakceptowaną", 8 | "considerName": "rozważ", 9 | "considerDescription": "Oznacz sugestię z tego serwera jako rozważaną", 10 | "denyName": "odrzuć", 11 | "denyDescription": "Oznacz sugestię z tego serwera jako odrzuconą", 12 | "optionsIdName": "nr", 13 | "optionsIdDescription": "Nr sugestii do zaktualizowania", 14 | "optionsResponseName": "odpowiedź", 15 | "optionsResponseDescription": "Odpowiedź, która ma zostać dodana do sugestii", 16 | "notConfigured": "Ten serwer nie ma ustawionego kanału dla sugestii — skonfiguruj to przy pomocy `/ustawienia edytuj kanał #kanał` lub poproś administratora, aby to zrobił.", 17 | "suggestionArchived": "Sugestia jest zarchiwizowana i nie może być edytowana.", 18 | "suggestionIdDoesNotExist": "Nr sugestii, który został podany, nie istnieje.", 19 | "suggestionMessageDeleted": "Wiadomość z sugestią została usunięta. Z tego powodu sugestia została automatycznie zarchiwizowana.", 20 | "archiveSuccess": "Pomyślnie zarchiwizowano sugestię nr {{id}}.", 21 | "noReason": "*Nie podano powodu*", 22 | "success": "Pomyślnie zaktualizowano sugestię nr {{id}}.", 23 | "failure": "Przepraszam, nie udało mi się zaktualizować sugestii nr {{id}}!" 24 | } 25 | -------------------------------------------------------------------------------- /src/locales/pl/commands/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "infoEmbedDescription": "Iriss to bot zajmujący się sugestiami i ich zarządzaniem. To bot używający wyłącznie HTTP, zbudowany przy pomocy [Skyra HTTP Framework](https://www.npmjs.com/package/@skyra/http-framework)." 3 | } 4 | -------------------------------------------------------------------------------- /src/locales/pl/commands/suggest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "zasugeruj", 3 | "description": "Utwórz nową sugestię dla tego serwera", 4 | "componentsAccept": "Zaakceptuj", 5 | "componentsArchive": "Zarchiwizuj", 6 | "componentsConsider": "Rozważ", 7 | "componentsCreateThread": "Utwórz Wątek", 8 | "componentsDeny": "Odrzuć", 9 | "modifyArchived": "Nie można modyfikować sugestii, która została zarchiwizowana. Możesz natomiast odnieść się do niej w nowej sugestii.", 10 | "modifyDoesNotExist": "Podana sugestia nie istnieje.", 11 | "modifyMessageDeleted": "Wygląda na to, że sugestia którą próbujesz edytować, została usunięta, i z tego powodu została też automatycznie zarchiwizowana. Przykro mi!", 12 | "modifyMismatchingAuthor": "Nie możesz edytować nieswoich sugestii.", 13 | "modifyNotConfigured": "Kanał sugestii został usunięty z konfiguracji, przez co wszystkie sugestie są teraz tylko do odczytu. Jeśli to nie jest zamierzony efekt, skontaktuj się z administracją serwera w celu rozwiązania problemu.", 14 | "modifyReplied": "Sugestie z odpowiedziami nie podlegają edycji. Dyskusję możesz kontynuować w przeznaczonym do tego kanale.", 15 | "modifySuccess": "Pomyślnie zaktualizowano Twoją sugestię (`nr {{id}}`)!", 16 | "newMessageContent": "[`nr {{id}}`] **Zasugerowane przez {{user.mention}} o {{timestamp}}**:\n{{message}}", 17 | "newMessageEmbedTitle": "#{{id}} - {{user.tag}} ({{user.id}})", 18 | "newFailedToSend": "Przykro mi, ale nie udało mi się wysłać wiadomości na kanale {{channel}}. Proszę zgłosić ten problem do administratora. 😦", 19 | "newNotConfigured": "Ten serwer nie ma jeszcze skonfigurowanego kanału dla sugestii. Skontaktuj się z administratorami, aby go skonfigurować!", 20 | "newSuccess": "Pomyślnie wysłano Twoją sugestię (`nr {{id}}`)!", 21 | "reactionsFailed": "Nie udało się dodać reakcji {{failed, list(conjunction)}}.", 22 | "reactionsFailedAndRemoved": "Nie udało się dodać reakcji {{failed, list(conjunction)}}, z czego usunięto {{removed, list(conjunction)}}, gdyż nie jestem już w stanie ich użyć.", 23 | "optionsIdName": "nr", 24 | "optionsIdDescription": "Nr sugestii do zmodyfikowania", 25 | "optionsSuggestionName": "sugestia", 26 | "optionsSuggestionDescription": "Sugestia do wysłania" 27 | } 28 | -------------------------------------------------------------------------------- /src/locales/pl/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/pl/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | { 2 | "contentAccepted": "Zaakceptowane przez {{tag}} o {{time}}", 3 | "contentConsidered": "Rozważane przez {{tag}} o {{time}}", 4 | "contentDenied": "Odrzucone przez {{tag}} o {{time}}", 5 | "updateFailure": "Przykro mi, nie udało mi się zaktualizować wiadomości! 😢", 6 | "updateSuccess": "Pomyślnie zaktualizowano wiadomość!" 7 | } 8 | -------------------------------------------------------------------------------- /src/locales/pl/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | { 2 | "missingResolvePermissions": "Musisz mieć uprawnienia do używania komendy /rozwiąż, aby użyć tego przycisku.", 3 | "modalTitle": "Sugestia nr {{id}}", 4 | "modalFieldLabelAccept": "Odpowiedź (Akceptuj)", 5 | "modalFieldLabelConsider": "Odpowiedź (Rozważ)", 6 | "modalFieldLabelDeny": "Odpowiedź (Odrzuć)", 7 | "modalFieldPlaceholderAccept": "Wygląda świetnie, bo...", 8 | "modalFieldPlaceholderConsider": "Rozważamy tę sugestię, gdyż...", 9 | "modalFieldPlaceholderDeny": "Obawiam się, że sugestia jest odrzucona, ponieważ...", 10 | "archiveSuccess": "Sugestia została zarchiwizowana pomyślnie.", 11 | "archiveThreadFailure": "Przykro mi, nie udało mi się zarchiwizować wątku sugestii!", 12 | "reactionRemovalFailure": "Usuwanie reakcji nie powiodło się; możliwe, że trzeba je usunąć ręcznie.", 13 | "archiveMessageFailure": "Nie udało mi się zarchiwizować wiadomości; możliwe, że została usunięta.", 14 | "threadChannelCreationFailure": "Nie udało mi się utworzyć wątku. Poproś administratora o przyznanie mi pozwoleń albo moderatora o manualne utworzenie wątku. Przykro mi! 😢", 15 | "threadMessageUpdateSuccess": "Pomyślnie utworzono wątek {{channel}} oraz usunięto przycisk wątku z sugestii.", 16 | "threadMessageUpdateFailure": "Pomyślnie utworzono wątek {{channel}}, jednak nie udało mi się usunąć przycisku wątku z sugestii. 😦", 17 | "threadMemberAddFailure": "Niestety, nie udało mi się dodać Cię do wątku; spróbuj dołączyć do niego ręcznie. Przepraszam za utrudnienia. 😦" 18 | } 19 | -------------------------------------------------------------------------------- /src/locales/pl/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "enabled": "Włączono", 3 | "disabled": "Wyłączono", 4 | "unset": "Brak ustawienia", 5 | "none": "Brak" 6 | } 7 | -------------------------------------------------------------------------------- /src/locales/pt-BR/commands/config.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/pt-BR/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/pt-BR/commands/resolve.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/pt-BR/commands/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/pt-BR/commands/suggest.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/pt-BR/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/pt-BR/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/pt-BR/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/pt-BR/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/ro/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/ro/commands/resolve.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rezolvă", 3 | "description": "Rezolvă sugestiile de la acest server", 4 | "archiveName": "arhivare", 5 | "archiveDescription": "Arhivează o sugestie de la acest server", 6 | "acceptName": "acceptă", 7 | "acceptDescription": "Marchează o sugestie de la acest server ca fiind acceptată", 8 | "considerName": "considerați", 9 | "considerDescription": "Marchează o sugestie de la acest server ca fiind considerată", 10 | "denyName": "refuză", 11 | "denyDescription": "Marchează o sugestie de la acest server ca refuzat", 12 | "optionsIdName": "id", 13 | "optionsIdDescription": "ID-ul sugestiei de actualizat", 14 | "optionsResponseName": "răspuns", 15 | "optionsResponseDescription": "Răspunsul care urmează să fie adăugat la mesajul sugerat", 16 | "notConfigured": "Acest server nu are un canal de sugestii configurat, vă rugăm să-l configurați cu `/configurație modifică canal #canal` sau cereți unui administrator să facă acest lucru.", 17 | "suggestionArchived": "Sugestia este arhivată și nu poate fi editată.", 18 | "suggestionIdDoesNotExist": "ID-ul sugestiei pe care l-ați specificat nu există.", 19 | "suggestionMessageDeleted": "Mesajul sugestiei a fost șters și, prin urmare, a fost arhivat automat.", 20 | "archiveSuccess": "Sugestia {{id}} a fost arhivată cu succes.", 21 | "noReason": "*Niciun motiv specificat*", 22 | "success": "Sugestia {{id}} a fost actualizată cu succes.", 23 | "failure": "Nu am putut actualiza sugestia {{id}}, îmi pare rău!" 24 | } 25 | -------------------------------------------------------------------------------- /src/locales/ro/commands/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "infoEmbedDescription": "Iriss este un bot concentrat în gestionarea sugestiilor. Acesta este un bot exclusiv HTTP construit pe [Skyra HTTP Framework](https://www.npmjs.com/package/@skyra/http-framework)." 3 | } 4 | -------------------------------------------------------------------------------- /src/locales/ro/commands/suggest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sugerează", 3 | "description": "Creează o nouă sugestie pentru acest server", 4 | "postAsSuggestionName": "Postați ca sugestie", 5 | "componentsAccept": "Acceptă", 6 | "componentsArchive": "Arhivare", 7 | "componentsConsider": "Considerați", 8 | "componentsCreateThread": "Crează fir", 9 | "componentsDeny": "Refuză", 10 | "modifyArchived": "Nu puteți modifica o sugestie care este arhivată. Puteți să faceți referire la aceasta cu o nouă sugestie.", 11 | "modifyDoesNotExist": "Sugestia pe care ați specificat-o nu există.", 12 | "modifyMessageDeleted": "Se pare că sugestia pe care încercați să o editați a fost ștearsă și, ca atare, arhivată automat. Îmi pare rău!", 13 | "modifyMismatchingAuthor": "Nu poți modifica sugestia altcuiva.", 14 | "modifyNotConfigured": "Acest server a eliminat canalul de sugestii din configurație, și, ca atare, toate sugestiile sunt acum doar pentru citire. Vă rugăm să contactați administratorii serverului cu privire la acest incident dacă asta ar fi trebuit să funcționeze.", 15 | "modifyReplied": "Nu puteți modifica o sugestie care a fost răspunsă. O puteți urmări în canalul de discuții.", 16 | "modifySuccess": "Sugestie actualizată cu succes (`#{{id}}`)!", 17 | "cooldown": "Ești blocat din folosirea acestei comanzi din cauza perioadei de așteptare care ține până la {{time}}.", 18 | "newMessageContent": "[`#{{id}}`] **{{user.mention}} a sugerat la {{timestamp}}**:\n{{message}}", 19 | "newMessageEmbedTitle": "#{{id}} - {{user.tag}} ({{user.id}})", 20 | "newFailedToSend": "Îmi pare rău, dar nu am putut posta un mesaj în {{channel}}. Te rog să raportezi această problemă unui administrator. 😦", 21 | "newNotConfigured": "Acest server nu a configurat încă un canal de sugestii. Te rog să contactezi administratorii serverului pentru a-l configura!", 22 | "newSuccess": "Sugestie ta a fost trimisă cu succes (`#{{id}}`)!", 23 | "reactionsFailed": "Nu am reușit să adaug {{failed, list(conjunction)}}.", 24 | "reactionsFailedAndRemoved": "Nu am reușit să adaug {{failed, list(conjunction)}}, din care am eliminat {{removed, list(conjunction)}}, deoarece am pierdut accesul pentru a reacționa cu ei.", 25 | "optionsIdName": "id", 26 | "optionsIdDescription": "Numărul sugestiei de editat", 27 | "optionsSuggestionName": "sugestie", 28 | "optionsSuggestionDescription": "Sugestia de postat", 29 | "rePostNoContent": "Nu am putut posta mesajul ca sugestie, deoarece nu are niciun conținut din care să copiez." 30 | } 31 | -------------------------------------------------------------------------------- /src/locales/ro/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/ro/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | { 2 | "contentAccepted": "Acceptat de {{tag}} la {{time}}", 3 | "contentConsidered": "Considerat de {{tag}} la {{time}}", 4 | "contentDenied": "Refuzat de {{tag}} la {{time}}", 5 | "updateFailure": "Nu am reușit să actualizez conținutul mesajului, îmi pare rău! 😢", 6 | "updateSuccess": "Mesajul a fost actualizat cu succes!" 7 | } 8 | -------------------------------------------------------------------------------- /src/locales/ro/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | { 2 | "missingResolvePermissions": "Trebuie să aveți permisiunea de a rula /rezolvă pentru a utiliza acest buton.", 3 | "modalTitle": "Sugestia #{{id}}", 4 | "modalFieldLabelAccept": "Mesaj (Acceptare)", 5 | "modalFieldLabelConsider": "Mesaj (Considerare)", 6 | "modalFieldLabelDeny": "Mesaj (Refuzare)", 7 | "modalFieldPlaceholderAccept": "Mi se pare bine deoarece...", 8 | "modalFieldPlaceholderConsider": "Considerăm acest lucru pentru că...", 9 | "modalFieldPlaceholderDeny": "Mi-e teamă că refuzăm acest lucru pentru că...", 10 | "archiveSuccess": "Sugestia a fost arhivată cu succes.", 11 | "archiveThreadFailure": "Nu am reușit să arhivez firul legat, îmi pare rău!", 12 | "reactionRemovalFailure": "Eliminarea tuturor reacțiilor a eșuat, poate fi necesar să le eliminați manual.", 13 | "archiveMessageFailure": "Nu am putut arhiva mesajul, este posibil să fi fost șters.", 14 | "threadChannelCreationFailure": "Nu am putut să creez firul, s-ar putea să trebuiască să contactați un administrator pentru a-mi da permisiuni, sau un moderator pentru a-l crea, îmi pare rău! 😢", 15 | "threadMessageUpdateSuccess": "A fost creată cu succes firul {{channel}} și a fost șters butonul de discuție din mesajul de sugestie.", 16 | "threadMessageUpdateFailure": "Am reușit să creez firul {{channel}}, dar am avut o mică problemă cu actualizarea mesajului de sugestie, așa că nu am putut să elimin butonul. 😦", 17 | "threadMemberAddFailure": "De asemenea, nu am putut să vă adaug la fir, deci este posibil să trebuiască să vă alăturați manual. Îmi cer scuze pentru inconveniență. 😦" 18 | } 19 | -------------------------------------------------------------------------------- /src/locales/ro/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "enabled": "Activat", 3 | "disabled": "Dezactivat", 4 | "unset": "Nesetat", 5 | "none": "Niciunul" 6 | } 7 | -------------------------------------------------------------------------------- /src/locales/ru/commands/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "конфигурация", 3 | "description": "Управление конфигурацией для этого сервера", 4 | "viewName": "просмотреть", 5 | "viewDescription": "Просмотр текущей конфигурации", 6 | "viewContent": "**Текущие настройки**:\n\nКанал: {{channel}}\nАвто-ветка: {{autoThread}}\nКнопки: {{buttons}}\nКомпактный режим: {{compact}}\nКулдаун: {{cooldown}}\nПоказывать историю обновлений: {{displayUpdateHistory}}\nВложения: {{embed}}\nРеакции: {{reactions}}\n\n> **Примечание**: Для изменения настроек вы можете использовать `/конфигурация изменить`.", 7 | "editName": "изменить", 8 | "editDescription": "Изменение значения конфигурации", 9 | "editOptionsChannelDescription": "Канал для публикации новых предложений", 10 | "editOptionsAutoThreadDescription": "Автоматически создавать ветку из новых предложений (по умолчанию: False)", 11 | "editOptionsButtonsDescription": "Добавлять кнопки управления на новые предложения (по умолчанию: True)", 12 | "editOptionsCompactDescription": "Использовать компактный режим для новых предложений (по умолчанию: False)", 13 | "editOptionsCooldownDescription": "Продолжительность кулдауна для пользователя перед отправкой другого предложения (по умолчанию: Нет)", 14 | "editOptionsDisplayUpdateHistoryDescription": "Показывать до трёх последних ответов на предложение (по умолчанию: False)", 15 | "editOptionsEmbedDescription": "Использовать вложения для новых предложений (по умолчанию: True)", 16 | "editOptionsReactionsDescription": "Реакции, которые будут использоваться для новых предложений, максимум 3, разделённые пробелом", 17 | "editOptionsRemoveReactionsDescription": "Автоматически удалять все реакции с предложений при архивации (по умолчанию: False)", 18 | "editReactionsInvalidAmount": "Я ценю ваш энтузиазм, но я не могу позволить себе добавить больше трёх реакций, поэтому, пожалуйста, используйте максимум 3 эмодзи!", 19 | "editReactionsInvalidEmoji": "Я не смогла распознать в {{value}} допустимый эмодзи. Пожалуйста, повторите попытку, используя другой эмодзи. Простите за доставленные неудобства 😦", 20 | "editCooldownInvalidDuration": "Мне не удалось подтвердить длительность {{value}}, пожалуйста, попробуйте использовать такие значения, как `2h`.", 21 | "editCooldownDurationTooShort": "Кулдаун не может быть меньше 1 секунды.", 22 | "editCooldownDurationTooLong": "Кулдаун не может быть больше 6 часов.", 23 | "resetName": "сбросить", 24 | "resetDescription": "Сброс значения конфигурации на изначальное", 25 | "resetOptionsKeyName": "опция", 26 | "resetOptionsKeyDescription": "Опция для сброса", 27 | "resetOptionsKeyChoicesAll": "все", 28 | "keyChannel": "канал", 29 | "keyAutoThread": "авто-ветка", 30 | "keyButtons": "кнопки", 31 | "keyCompact": "компактный-режим", 32 | "keyCooldown": "кулдаун", 33 | "keyDisplayUpdateHistory": "показывать-историю-обновлений", 34 | "keyEmbed": "вложения", 35 | "keyReactions": "реакции", 36 | "keyRemoveReactions": "удалять-реакции", 37 | "editSuccess": "Конфигурация для этого сервера успешно изменена.", 38 | "editFailure": "Мне не удалось сохранить ваши изменения, извините 😦" 39 | } 40 | -------------------------------------------------------------------------------- /src/locales/ru/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "показать-руководство", 3 | "description": "Показывает руководство по публикации новых предложений", 4 | "optionsHideName": "скрыть", 5 | "optionsHideDescription": "Скрывать руководство или нет", 6 | "optionsTargetName": "пользователь", 7 | "optionsTargetDescription": "Упоминаемый в сообщении пользователь, если есть", 8 | "message": "Чтобы отправить новое предложение, просто используйте команду {{command}} с {{bot}} или нажмите кнопку \"Отправить предложение\".\n\nВаше сообщение будет размещено в {{channel}}.", 9 | "buttonSubmit": "Отправить предложение", 10 | "buttonSupport": "Сервер поддержки" 11 | } 12 | -------------------------------------------------------------------------------- /src/locales/ru/commands/resolve.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "решить", 3 | "description": "Принять решение по поводу предложений с этого сервера", 4 | "archiveName": "архивировать", 5 | "archiveDescription": "Архивировать предложение с этого сервера", 6 | "acceptName": "принять", 7 | "acceptDescription": "Отметить предложение с этого сервера как принятое", 8 | "considerName": "рассмотреть", 9 | "considerDescription": "Отметить предложение с этого сервера как рассмотренное", 10 | "denyName": "отклонить", 11 | "denyDescription": "Отметить предложение с этого сервера как отклонённое", 12 | "optionsIdName": "id", 13 | "optionsIdDescription": "ID предложения для обновления", 14 | "optionsResponseName": "ответ", 15 | "optionsResponseDescription": "Ответ, который будет добавлен к сообщению, содержащему предложение", 16 | "notConfigured": "На этом сервере не настроен канал для предложений. Пожалуйста, настройте его, используя `/конфигурация изменить канал #канал`, или попросите администратора сделать это.", 17 | "suggestionArchived": "Предложение архивировано и не может быть изменено.", 18 | "suggestionIdDoesNotExist": "Указанный вами ID предложения не существует.", 19 | "suggestionMessageDeleted": "Сообщение, содержащее предложение, было удалено, поэтому предложение было архивировано.", 20 | "archiveSuccess": "Предложение {{id}} успешно архивировано.", 21 | "noReason": "*Причина не указана*", 22 | "success": "Предложение {{id}} успешно обновлено.", 23 | "failure": "Мне не удалось обновить предложение {{id}}, извините!" 24 | } 25 | -------------------------------------------------------------------------------- /src/locales/ru/commands/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "infoEmbedDescription": "Iriss — это бот, ориентированный на управление предложениями. Этот бот, использующий только HTTP, создан на основе [Skyra HTTP Framework](https://www.npmjs.com/package/@skyra/http-framework)." 3 | } 4 | -------------------------------------------------------------------------------- /src/locales/ru/commands/suggest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "предложить", 3 | "description": "Создать новое предложение для этого сервера", 4 | "postAsSuggestionName": "Опубликовать как предложение", 5 | "componentsAccept": "Принять", 6 | "componentsArchive": "Архивировать", 7 | "componentsConsider": "Рассмотреть", 8 | "componentsCreateThread": "Создать ветку", 9 | "componentsDeny": "Отклонить", 10 | "modifyArchived": "Вы не можете изменить архивированное предложение. Вы можете сослаться на него в новом предложении.", 11 | "modifyDoesNotExist": "Указанное вами предложение не существует.", 12 | "modifyMessageDeleted": "Похоже, что сообщение, содержащее предложение, которое вы пытаетесь отредактировать, было удалено, и, соответственно, предложение было автоматически архивировано. Извините!", 13 | "modifyMismatchingAuthor": "Вы не можете изменить чужое предложение.", 14 | "modifyNotConfigured": "Этот сервер удалил канал для предложений из конфигурации, поэтому все предложения теперь доступны только для чтения. Пожалуйста, свяжитесь с администраторами сервера по поводу данного инцидента, если это должно было работать.", 15 | "modifyReplied": "Вы не можете изменить предложение, на которое уже дан ответ. Вы можете написать о нём в канале для обсуждений.", 16 | "modifySuccess": "Ваше предложение (`#{{id}}`) успешно обновлено!", 17 | "cooldown": "Вы не можете использовать эту команду из-за кулдауна до {{time}}.", 18 | "newMessageContent": "[`#{{id}}`] **{{user.mention}} предлагает {{timestamp}}**:\n{{message}}", 19 | "newMessageEmbedTitle": "#{{id}} - {{user.tag}} ({{user.id}})", 20 | "newFailedToSend": "Извините, но мне не удалось отправить сообщение в {{channel}}. Пожалуйста, сообщите об этой проблеме администратору. 😦", 21 | "newNotConfigured": "На этом сервере ещё не настроен канал для предложений. Пожалуйста, свяжитесь с администраторами, чтобы настроить его!", 22 | "newSuccess": "Ваше предложение (`#{{id}}`) успешно отправлено!", 23 | "reactionsFailed": "Мне не удалось добавить {{failed, list(conjunction)}}.", 24 | "reactionsFailedAndRemoved": "Мне не удалось добавить {{failed, list(conjunction)}}, и я удалила {{removed, list(conjunction)}} из моей конфигурации, так как я больше не могу использовать их в качестве реакций из-за потери доступа к ним.", 25 | "optionsIdName": "id", 26 | "optionsIdDescription": "Номер предложения для редактирования", 27 | "optionsSuggestionName": "предложение", 28 | "optionsSuggestionDescription": "Предложение для публикации", 29 | "rePostNoContent": "Я не смогла опубликовать это сообщение в качестве предложения, потому что оно не имеет содержимого для копирования." 30 | } 31 | -------------------------------------------------------------------------------- /src/locales/ru/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | { 2 | "modalTitle": "Отправить предложение", 3 | "modalLabel": "Содержимое" 4 | } 5 | -------------------------------------------------------------------------------- /src/locales/ru/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | { 2 | "contentAccepted": "Принято {{tag}} {{time}}", 3 | "contentConsidered": "Рассмотрено {{tag}} {{time}}", 4 | "contentDenied": "Отклонено {{tag}} {{time}}", 5 | "updateFailure": "Мне не удалось обновить содержимое сообщения, извините! 😢", 6 | "updateSuccess": "Сообщение успешно обновлено!" 7 | } 8 | -------------------------------------------------------------------------------- /src/locales/ru/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | { 2 | "missingResolvePermissions": "Для использования этой кнопки у вас должны быть права на запуск /решить.", 3 | "modalTitle": "Предложение #{{id}}", 4 | "modalFieldLabelAccept": "Сообщение (Принять)", 5 | "modalFieldLabelConsider": "Сообщение (Рассмотреть)", 6 | "modalFieldLabelDeny": "Сообщение (Отклонить)", 7 | "modalFieldPlaceholderAccept": "На мой взгляд, выглядит хорошо, потому что...", 8 | "modalFieldPlaceholderConsider": "Мы принимаем это во внимание, потому что...", 9 | "modalFieldPlaceholderDeny": "Боюсь, мы отклоним это, потому что...", 10 | "archiveSuccess": "Предложение успешно архивировано.", 11 | "archiveThreadFailure": "Мне не удалось архивировать связанную ветку, извините!", 12 | "reactionRemovalFailure": "Не удалось выполнить удаление всех реакций. Возможно, вам потребуется удалить их вручную.", 13 | "archiveMessageFailure": "Мне не удалось архивировать сообщение, возможно, оно было удалено.", 14 | "threadChannelCreationFailure": "Мне не удалось создать ветку, вам может понадобиться связаться с администратором, чтобы предоставить мне права, или с модератором, чтобы создать ветку, извините! 😢", 15 | "threadMessageUpdateSuccess": "Ветка {{channel}} успешно создана, кнопка ветки удалена из сообщения, содержащего предложение.", 16 | "threadMessageUpdateFailure": "Я успешно создала ветку {{channel}}, однако у меня возникла небольшая проблема с обновлением сообщения, содержащего предложение, поэтому мне не удалось удалить кнопку. 😦", 17 | "threadMemberAddFailure": "Кроме того, мне не удалось добавить вас в ветку, поэтому вам может понадобиться присоединиться к ней самостоятельно. Простите за доставленные неудобства. 😦" 18 | } 19 | -------------------------------------------------------------------------------- /src/locales/ru/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "enabled": "Включено", 3 | "disabled": "Отключено", 4 | "unset": "Не установлено", 5 | "none": "Нет" 6 | } 7 | -------------------------------------------------------------------------------- /src/locales/sv-SE/commands/config.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/sv-SE/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/sv-SE/commands/resolve.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/sv-SE/commands/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/sv-SE/commands/suggest.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/sv-SE/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/sv-SE/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/sv-SE/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/sv-SE/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/th/commands/config.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/th/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/th/commands/resolve.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/th/commands/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/th/commands/suggest.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/th/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/th/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/th/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/th/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/tr/commands/config.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/tr/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/tr/commands/resolve.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/tr/commands/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/tr/commands/suggest.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/tr/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/tr/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/tr/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/tr/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/uk/commands/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "конфігурація", 3 | "description": "Керувати конфігурацією цього сервера", 4 | "viewName": "переглянути", 5 | "viewDescription": "Перегляд поточної конфігурації", 6 | "viewContent": "**Поточні налаштування**:\n\nКанал: {{channel}}\nАвто-гілка: {{autoThread}}\nКнопки: {{buttons}}\nКомпактний режим: {{compact}}\nКулдаун: {{cooldown}}\nВідображення Історію Оновлень: {{displayUpdateHistory}}\nВбудоване повідомлення: {{embed}}\nРеакції: {{reactions}}\n\n> **Примітка**: щоб оновити їх, ви можете використовувати `/конфігурація змінити`.", 7 | "editName": "змінити", 8 | "editDescription": "Змінити значення конфігурації", 9 | "editOptionsChannelDescription": "Канал для публікації нових пропозицій", 10 | "editOptionsAutoThreadDescription": "Чи створювати автоматично гілку на нових пропозиціях (за замовчуванням: False)", 11 | "editOptionsButtonsDescription": "Чи додавати кнопки керування на нові пропозиції (за замовчуванням: True)", 12 | "editOptionsCompactDescription": "Чи використовувати компактний режим в нових пропозиціях (за замовчуванням: False)", 13 | "editOptionsCooldownDescription": "Тривалість кулдауну для користувача перед створенням нової пропозиції (за замовчуванням: Немає)", 14 | "editOptionsDisplayUpdateHistoryDescription": "Чи показувати 3 останні відповіді на пропозиції (за замовчуванням: False)", 15 | "editOptionsEmbedDescription": "Чи використовувати вкладення для нових пропозицій (за замовчуванням: True)", 16 | "editOptionsReactionsDescription": "Реакції, які будуть ставитись на нових пропозиціях, до 3, розділених пробілом", 17 | "editOptionsRemoveReactionsDescription": "Чи видаляти автоматично всі реакції з пропозиції під час архівування (за замовчуванням: False)", 18 | "editReactionsInvalidAmount": "Я ціную ваш ентузіазм, але я не можу дозволити собі додати більше 3-х реакцій, тож, будь ласка, вкажіть максимум 3 емодзі, вибачте!", 19 | "editReactionsInvalidEmoji": "Я не змогла розпізнати в {{value}} дійсний емодзі, будь ласка, спробуйте ще раз з іншим. Вибачте за незручності 😦", 20 | "editCooldownInvalidDuration": "Мені не вдалося отримати тривалість із {{value}}, будь ласка, спробуйте використовувати слова, такі як `2h`.", 21 | "editCooldownDurationTooShort": "Кулдаун не може бути коротше 1 секунди.", 22 | "editCooldownDurationTooLong": "Кулдаун не може бути довшим за 6 годин.", 23 | "resetName": "скинути", 24 | "resetDescription": "Скинути параметр конфігурації до стандартних налаштувань", 25 | "resetOptionsKeyName": "ключ", 26 | "resetOptionsKeyDescription": "Параметр для скидання", 27 | "resetOptionsKeyChoicesAll": "всi", 28 | "keyChannel": "канал", 29 | "keyAutoThread": "авто-гілка", 30 | "keyButtons": "кнопки", 31 | "keyCompact": "компактний-режим", 32 | "keyCooldown": "кулдаун", 33 | "keyDisplayUpdateHistory": "відображати-історію-оновлень", 34 | "keyEmbed": "вбудування", 35 | "keyReactions": "реакції", 36 | "keyRemoveReactions": "видаляти-реакції", 37 | "editSuccess": "Успішно змінено конфігурацію для цього сервера.", 38 | "editFailure": "Я не змогла зберегти ваші зміни, вибачте 😦" 39 | } 40 | -------------------------------------------------------------------------------- /src/locales/uk/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "опублікувати-гайд", 3 | "description": "Публікує інструкцію про публікацію нових пропозицій", 4 | "optionsHideName": "сховати", 5 | "optionsHideDescription": "Приховати посібник чи ні", 6 | "optionsTargetName": "користувач", 7 | "optionsTargetDescription": "Користувач для згадки в повідомленні, якщо є", 8 | "message": "Щоб надіслати нову пропозицію, просто скористайтеся командою {{command}} з {{bot}}, або натисніть прикріплену кнопку «Надіслати Пропозицію».\n\nВаше повідомлення буде опубліковано в {{channel}}.", 9 | "buttonSubmit": "Надіслати Пропозицію", 10 | "buttonSupport": "Сервер Підтримки" 11 | } 12 | -------------------------------------------------------------------------------- /src/locales/uk/commands/resolve.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "вирішити", 3 | "description": "Розглянути пропозицію на цьому сервері", 4 | "archiveName": "архівувати", 5 | "archiveDescription": "Архівувати пропозицію на цьому сервері", 6 | "acceptName": "схвалити", 7 | "acceptDescription": "Помітити пропозицію на цьому сервері як схвалену", 8 | "considerName": "розглянути", 9 | "considerDescription": "Помітити пропозицію на цьому сервері як розглянуту", 10 | "denyName": "відмовити", 11 | "denyDescription": "Помітити пропозицію на цьому сервері як відмовлену", 12 | "optionsIdName": "id", 13 | "optionsIdDescription": "ID пропозиції для оновлення", 14 | "optionsResponseName": "відповідь", 15 | "optionsResponseDescription": "Відповідь, яка буде додана до повідомлення з пропозицією", 16 | "notConfigured": "Цей сервер не має налаштованого каналу пропозиції, будь ласка, налаштуйте його за допомогою команди `/конфігурація змінити канал #channel` або запитайте адміністратора зробити це.", 17 | "suggestionArchived": "Пропозиція архівована і не може бути відредагована.", 18 | "suggestionIdDoesNotExist": "Пропозиції з вказаним вами ID не існує.", 19 | "suggestionMessageDeleted": "Повідомлення пропозиції було видалено, і тому воно було автоматично архівовано.", 20 | "archiveSuccess": "Успішно заархівовано пропозицію {{id}}.", 21 | "noReason": "*Причину не вказано*", 22 | "success": "Успішно оновлено пропозицію {{id}}.", 23 | "failure": "Я не змогла оновити пропозицію {{id}}, вибачте!" 24 | } 25 | -------------------------------------------------------------------------------- /src/locales/uk/commands/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "infoEmbedDescription": "Iriss - це бот сфокусований на керування пропозиціями. Це лише HTTP-бот, створений на основі [Skyra HTTP Framework](https://www.npmjs.com/package/@skyra/http-framework)." 3 | } 4 | -------------------------------------------------------------------------------- /src/locales/uk/commands/suggest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "запропонувати", 3 | "description": "Створити нову пропозицію для цього сервера", 4 | "postAsSuggestionName": "Опублікувати як пропозицію", 5 | "componentsAccept": "Схвалити", 6 | "componentsArchive": "Архівувати", 7 | "componentsConsider": "Розглянути", 8 | "componentsCreateThread": "Створити гілку", 9 | "componentsDeny": "Відмовити", 10 | "modifyArchived": "Ви не можете змінювати пропозицію яка архівована. Ви можете посилатися на неї з новою пропозицією.", 11 | "modifyDoesNotExist": "Вказана вами пропозиція не існує.", 12 | "modifyMessageDeleted": "Здається, що пропозиція яку ви намагаєтесь редагувати була видалена, та як така, автоматично архівована. Вибачте!", 13 | "modifyMismatchingAuthor": "Ви не можете змінювати чужі пропозиції.", 14 | "modifyNotConfigured": "Цей сервер видалив канал для пропозиції з конфігурації, тому всі пропозиції доступні тепер лише для читання. Будь ласка, зв'яжіться з адміністраторами серверу щодо цього випадку, якщо це повинно працювати.", 15 | "modifyReplied": "Ви не можете змінити пропозицію на яку вже є відповідь. Ви можете перейти до каналу обговорення.", 16 | "modifySuccess": "Успішно оновлено вашу пропозицію (`#{{id}}`)!", 17 | "cooldown": "Ви не можете використати цю команду, бо на вас діє кулдаун до {{time}}.", 18 | "newMessageContent": "[`#{{id}}`] **{{user.mention}} пропонує {{timestamp}}**:\n{{message}}", 19 | "newMessageEmbedTitle": "#{{id}} - {{user.tag}} ({{user.id}})", 20 | "newFailedToSend": "Вибачте, але я не змогла опублікувати повідомлення в {{channel}}. Будь ласка, повідомте про цю проблему адміністратору. 😦", 21 | "newNotConfigured": "Цей сервер ще не налаштовував канал пропозицій. Зверніться до адміністраторів для його налаштування!", 22 | "newSuccess": "Вашу пропозицію (`#{{id}}`) успішно відправлено!", 23 | "reactionsFailed": "Я не змогла додати {{failed, list(conjunction)}}.", 24 | "reactionsFailedAndRemoved": "Я не змогла додати {{failed, list(conjunction)}}, та видалила {{removed, list(conjunction)}}, тому що втратила доступ до них, щоб реагувати ними.", 25 | "optionsIdName": "id", 26 | "optionsIdDescription": "Номер пропозиції для редагування", 27 | "optionsSuggestionName": "пропозиція", 28 | "optionsSuggestionDescription": "Пропозиція до публікації", 29 | "rePostNoContent": "Я не змогла опублікувати повідомлення як пропозицію, тому що воно не має вмісту для копіювання." 30 | } 31 | -------------------------------------------------------------------------------- /src/locales/uk/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | { 2 | "modalTitle": "Надіслати Пропозицію", 3 | "modalLabel": "Зміст" 4 | } 5 | -------------------------------------------------------------------------------- /src/locales/uk/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | { 2 | "contentAccepted": "Прийнято {{tag}} | {{time}}", 3 | "contentConsidered": "Розглянуто {{tag}} | {{time}}", 4 | "contentDenied": "Відмовлено {{tag}} | {{time}}", 5 | "updateFailure": "Мені не вдалося оновити зміст повідомлення, вибачте! 😢", 6 | "updateSuccess": "Повідомлення успішно оновлено!" 7 | } 8 | -------------------------------------------------------------------------------- /src/locales/uk/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | { 2 | "missingResolvePermissions": "Ви повинні мати дозвіл на запуск /вирішити для використання цієї кнопки.", 3 | "modalTitle": "Пропозиція #{{id}}", 4 | "modalFieldLabelAccept": "Повідомлення (Прийняти)", 5 | "modalFieldLabelConsider": "Повідомлення (Розглянути)", 6 | "modalFieldLabelDeny": "Повідомлення (Відмовити)", 7 | "modalFieldPlaceholderAccept": "Виглядає добре для мене, бо...", 8 | "modalFieldPlaceholderConsider": "Ми розглядаємо це, тому що...", 9 | "modalFieldPlaceholderDeny": "Боюся, ми відмовляємо це, оскільки...", 10 | "archiveSuccess": "Пропозицію було успішно архівовано.", 11 | "archiveThreadFailure": "Я не можу архівувати зв'язану гілку, вибачте!", 12 | "reactionRemovalFailure": "Видалення всіх реакцій не вдалося, ви можете видалити їх вручну.", 13 | "archiveMessageFailure": "Я не змогла архівувати повідомлення, можливо, його видалили.", 14 | "threadChannelCreationFailure": "Я не змогла створити гілку, можливо, вам слід зв'язатися з адміністратором, щоб надати мені дозволи, або модератором, щоб створити гілку, вибачте! 😢", 15 | "threadMessageUpdateSuccess": "Успішно створено гілку {{channel}} та видалено кнопку гілки з повідомлення пропозиції.", 16 | "threadMessageUpdateFailure": "Я успішно створила гілку {{channel}}, однак у мене виникла невеличка проблема з оновленням пропозиції й тому я не змогла видалити кнопку. 😦", 17 | "threadMemberAddFailure": "Також я не змогла додати вас до гілки, тому вам може знадобитись приєднатись вручну. Вибачте за незручності. 😦" 18 | } 19 | -------------------------------------------------------------------------------- /src/locales/uk/shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "enabled": "Увімкнено", 3 | "disabled": "Вимкнено", 4 | "unset": "Не встановлено", 5 | "none": "Немає" 6 | } 7 | -------------------------------------------------------------------------------- /src/locales/vi/commands/config.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/vi/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/vi/commands/resolve.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/vi/commands/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/vi/commands/suggest.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/vi/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/vi/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/vi/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/vi/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/zh-CN/commands/config.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/zh-CN/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/zh-CN/commands/resolve.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/zh-CN/commands/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/zh-CN/commands/suggest.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/zh-CN/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/zh-CN/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/zh-CN/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/zh-CN/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/zh-TW/commands/config.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/zh-TW/commands/post-guide.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/zh-TW/commands/resolve.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/zh-TW/commands/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/zh-TW/commands/suggest.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/zh-TW/interaction-handlers/suggestions-create.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/zh-TW/interaction-handlers/suggestions-modals.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/zh-TW/interaction-handlers/suggestions.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/locales/zh-TW/shared.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { setup } from '#lib/setup/all'; 2 | import { setupAPI } from '#lib/setup/api'; 3 | import { envParseInteger, envParseString } from '@skyra/env-utilities'; 4 | import { Client, container } from '@skyra/http-framework'; 5 | import { init, load } from '@skyra/http-framework-i18n'; 6 | import { registerCommands } from '@skyra/shared-http-pieces'; 7 | import { createBanner } from '@skyra/start-banner'; 8 | import { morning } from 'gradient-string'; 9 | 10 | setup(); 11 | 12 | await load(new URL('../src/locales', import.meta.url)); 13 | await init({ fallbackLng: 'en-US', returnNull: false, returnEmptyString: false }); 14 | 15 | const client = new Client(); 16 | setupAPI(); 17 | await client.load(); 18 | 19 | void registerCommands(); 20 | 21 | const address = envParseString('HTTP_ADDRESS', '0.0.0.0'); 22 | const port = envParseInteger('HTTP_PORT', 3000); 23 | await client.listen({ address, port }); 24 | 25 | console.log( 26 | morning.multiline( 27 | createBanner({ 28 | logo: [ 29 | String.raw` ^ `, 30 | String.raw` /A\ `, 31 | String.raw` //I\\ `, 32 | String.raw` ///I\\\ `, 33 | String.raw` ////I\\\\ `, 34 | String.raw` /////I\\\\\ `, 35 | String.raw` //////I\\\\\\ `, 36 | String.raw` '////I\\\\' `, 37 | String.raw` '//I\\' `, 38 | String.raw` 'I' `, 39 | '' 40 | ], 41 | name: [ 42 | String.raw`d888888b d8888b. d888888b .d8888. .d8888.`, 43 | String.raw` '88' 88 '8D '88' 88' YP 88' YP`, 44 | String.raw` 88 88oobY' 88 '8bo. '8bo.`, 45 | String.raw` 88 88'8b 88 'Y8b. 'Y8b.`, 46 | String.raw` .88. 88 '88. .88. db 8D db 8D`, 47 | String.raw`Y888888P 88 YD Y888888P '8888Y' '8888Y'` 48 | ], 49 | extra: [ 50 | '', 51 | `Loaded: ${container.stores.get('commands').size} commands`, 52 | ` : ${container.stores.get('interaction-handlers').size} interaction handlers`, 53 | `Listening: ${address}:${port}` 54 | ] 55 | }) 56 | ) 57 | ); 58 | container.logger.info('Ready'); 59 | -------------------------------------------------------------------------------- /src/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.base.json", 3 | "compilerOptions": { 4 | "rootDir": ".", 5 | "baseUrl": ".", 6 | "outDir": "../dist", 7 | "composite": true, 8 | "tsBuildInfoFile": "../dist/tsconfig.tsbuildinfo", 9 | "paths": { 10 | "#lib/*": ["lib/*"] 11 | } 12 | }, 13 | "include": ["."] 14 | } 15 | -------------------------------------------------------------------------------- /tsconfig.base.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["@sapphire/ts-config", "@sapphire/ts-config/extra-strict", "@sapphire/ts-config/decorators", "@sapphire/ts-config/verbatim"], 3 | "compilerOptions": { 4 | "module": "NodeNext", 5 | "moduleResolution": "NodeNext", 6 | "target": "ESNext", 7 | "removeComments": true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /tsconfig.eslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.base.json", 3 | "include": ["src", "scripts"] 4 | } 5 | --------------------------------------------------------------------------------