mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-17 04:55:42 +09:00
revert(admin): restore user type toggles (#3306)
This commit is contained in:
1 parent
0ec1cee99e
commit
c486c2d3d0
87 files changed
+622
-13
No files matched your search
@@ -6266,6 +6266,72 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"/admin/users/{user_id}/bot-status": {
|
||||
"put": {
|
||||
"operationId": "set_admin_user_bot_status",
|
||||
"summary": "Set user bot status",
|
||||
"tags": ["Admin"],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Success",
|
||||
"content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserMutationResponse"}}}
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad Request - The request was malformed or contained invalid data",
|
||||
"content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized - Authentication is required or the token is invalid",
|
||||
"content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden - You do not have permission to perform this action",
|
||||
"content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}
|
||||
},
|
||||
"429": {
|
||||
"description": "Too Many Requests - You are being rate limited",
|
||||
"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ThrottledError"}}},
|
||||
"headers": {
|
||||
"Retry-After": {
|
||||
"description": "Number of seconds to wait before retrying (only on 429)",
|
||||
"schema": {"type": "integer"}
|
||||
},
|
||||
"X-RateLimit-Limit": {
|
||||
"description": "The number of requests that can be made in the current window",
|
||||
"schema": {"type": "integer"}
|
||||
},
|
||||
"X-RateLimit-Remaining": {
|
||||
"description": "The number of remaining requests that can be made",
|
||||
"schema": {"type": "integer"}
|
||||
},
|
||||
"X-RateLimit-Reset": {
|
||||
"description": "Unix timestamp when the rate limit resets",
|
||||
"schema": {"type": "integer"}
|
||||
}
|
||||
}
|
||||
},
|
||||
"500": {
|
||||
"description": "Internal Server Error - An unexpected error occurred",
|
||||
"content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}
|
||||
}
|
||||
},
|
||||
"description": "Mark or unmark a user account as a bot. Controls bot badge visibility and API permissions. Creates audit log entry. Requires USER_UPDATE_BOT_STATUS permission.",
|
||||
"security": [{"adminApiKey": []}],
|
||||
"parameters": [
|
||||
{
|
||||
"name": "user_id",
|
||||
"in": "path",
|
||||
"required": true,
|
||||
"schema": {"description": "The ID of the user", "allOf": [{"$ref": "#/components/schemas/SnowflakeType"}]},
|
||||
"description": "The ID of the user"
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AdminUserBotStatusRequest"}}}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/admin/users/{user_id}/change-log": {
|
||||
"get": {
|
||||
"operationId": "list_admin_user_change_log",
|
||||
@@ -7967,6 +8033,72 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"/admin/users/{user_id}/system-status": {
|
||||
"put": {
|
||||
"operationId": "set_admin_user_system_status",
|
||||
"summary": "Set user system status",
|
||||
"tags": ["Admin"],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Success",
|
||||
"content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserMutationResponse"}}}
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad Request - The request was malformed or contained invalid data",
|
||||
"content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized - Authentication is required or the token is invalid",
|
||||
"content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden - You do not have permission to perform this action",
|
||||
"content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}
|
||||
},
|
||||
"429": {
|
||||
"description": "Too Many Requests - You are being rate limited",
|
||||
"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ThrottledError"}}},
|
||||
"headers": {
|
||||
"Retry-After": {
|
||||
"description": "Number of seconds to wait before retrying (only on 429)",
|
||||
"schema": {"type": "integer"}
|
||||
},
|
||||
"X-RateLimit-Limit": {
|
||||
"description": "The number of requests that can be made in the current window",
|
||||
"schema": {"type": "integer"}
|
||||
},
|
||||
"X-RateLimit-Remaining": {
|
||||
"description": "The number of remaining requests that can be made",
|
||||
"schema": {"type": "integer"}
|
||||
},
|
||||
"X-RateLimit-Reset": {
|
||||
"description": "Unix timestamp when the rate limit resets",
|
||||
"schema": {"type": "integer"}
|
||||
}
|
||||
}
|
||||
},
|
||||
"500": {
|
||||
"description": "Internal Server Error - An unexpected error occurred",
|
||||
"content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}
|
||||
}
|
||||
},
|
||||
"description": "Mark or unmark a user as a system account. System accounts have special permissions for automated operations. Creates audit log entry. Requires USER_UPDATE_BOT_STATUS permission.",
|
||||
"security": [{"adminApiKey": []}],
|
||||
"parameters": [
|
||||
{
|
||||
"name": "user_id",
|
||||
"in": "path",
|
||||
"required": true,
|
||||
"schema": {"description": "The ID of the user", "allOf": [{"$ref": "#/components/schemas/SnowflakeType"}]},
|
||||
"description": "The ID of the user"
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AdminUserSystemStatusRequest"}}}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/admin/users/{user_id}/traits": {
|
||||
"put": {
|
||||
"operationId": "set_admin_user_traits",
|
||||
@@ -9413,6 +9545,13 @@
|
||||
},
|
||||
"required": ["traits"]
|
||||
},
|
||||
"AdminUserSystemStatusRequest": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"system": {"type": "boolean", "description": "Whether the user should be marked as a system user"}
|
||||
},
|
||||
"required": ["system"]
|
||||
},
|
||||
"AdminStorePurchaseListResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -9877,6 +10016,11 @@
|
||||
"required": ["entries", "next_page_token"],
|
||||
"additionalProperties": false
|
||||
},
|
||||
"AdminUserBotStatusRequest": {
|
||||
"type": "object",
|
||||
"properties": {"bot": {"type": "boolean", "description": "Whether the user should be marked as a bot"}},
|
||||
"required": ["bot"]
|
||||
},
|
||||
"AdminUserBanNoteRequest": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -9991,7 +10135,7 @@
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"acls": {
|
||||
"maxItems": 105,
|
||||
"maxItems": 106,
|
||||
"type": "array",
|
||||
"items": {"$ref": "#/components/schemas/AdminAclType"},
|
||||
"description": "List of access control permissions to assign"
|
||||
@@ -12892,7 +13036,7 @@
|
||||
},
|
||||
"acls": {
|
||||
"description": "Replacement list of access control permissions for the key",
|
||||
"maxItems": 105,
|
||||
"maxItems": 106,
|
||||
"type": "array",
|
||||
"items": {"$ref": "#/components/schemas/AdminAclType"}
|
||||
}
|
||||
@@ -12910,7 +13054,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"acls": {
|
||||
"maxItems": 105,
|
||||
"maxItems": 106,
|
||||
"type": "array",
|
||||
"items": {"type": "string"},
|
||||
"description": "List of access control permissions for the key"
|
||||
@@ -12940,7 +13084,7 @@
|
||||
"maximum": 365
|
||||
},
|
||||
"acls": {
|
||||
"maxItems": 105,
|
||||
"maxItems": 106,
|
||||
"type": "array",
|
||||
"items": {"$ref": "#/components/schemas/AdminAclType"},
|
||||
"description": "List of access control permissions for the key"
|
||||
@@ -12961,7 +13105,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"acls": {
|
||||
"maxItems": 105,
|
||||
"maxItems": 106,
|
||||
"type": "array",
|
||||
"items": {"type": "string"},
|
||||
"description": "List of access control permissions for the key"
|
||||
@@ -12974,7 +13118,7 @@
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"acls": {
|
||||
"maxItems": 105,
|
||||
"maxItems": 106,
|
||||
"type": "array",
|
||||
"items": {"type": "string", "minLength": 1, "maxLength": 64},
|
||||
"description": "Every admin access control permission the admin API recognises"
|
||||
@@ -13076,6 +13220,7 @@
|
||||
"user:view:email",
|
||||
"user:view:ip",
|
||||
"user:temp_ban",
|
||||
"user:update:bot_status",
|
||||
"user:update:dob",
|
||||
"user:update:email",
|
||||
"user:update:flags",
|
||||
@@ -16123,7 +16268,7 @@
|
||||
"description": "ISO 8601 timestamp when the pending deletion was scheduled",
|
||||
"type": "string"
|
||||
},
|
||||
"acls": {"maxItems": 105, "type": "array", "items": {"type": "string"}},
|
||||
"acls": {"maxItems": 106, "type": "array", "items": {"type": "string"}},
|
||||
"traits": {"maxItems": 100, "type": "array", "items": {"type": "string"}},
|
||||
"has_totp": {"type": "boolean"},
|
||||
"authenticator_types": {"maxItems": 10, "type": "array", "items": {"$ref": "#/components/schemas/Int32Type"}},
|
||||
|
||||
@@ -90,6 +90,7 @@ pub const USER_VIEW_DOB: &str = "user:view:dob";
|
||||
pub const USER_VIEW_EMAIL: &str = "user:view:email";
|
||||
pub const USER_VIEW_IP: &str = "user:view:ip";
|
||||
pub const USER_TEMP_BAN: &str = "user:temp_ban";
|
||||
pub const USER_UPDATE_BOT_STATUS: &str = "user:update:bot_status";
|
||||
pub const USER_UPDATE_DOB: &str = "user:update:dob";
|
||||
pub const USER_UPDATE_EMAIL: &str = "user:update:email";
|
||||
pub const USER_UPDATE_FLAGS: &str = "user:update:flags";
|
||||
@@ -196,6 +197,7 @@ pub const ALL_ACLS: &[&str] = &[
|
||||
USER_VIEW_EMAIL,
|
||||
USER_VIEW_IP,
|
||||
USER_TEMP_BAN,
|
||||
USER_UPDATE_BOT_STATUS,
|
||||
USER_UPDATE_DOB,
|
||||
USER_UPDATE_EMAIL,
|
||||
USER_UPDATE_FLAGS,
|
||||
|
||||
@@ -306,6 +306,28 @@ impl AdminApiClient {
|
||||
Ok(resp.user)
|
||||
}
|
||||
|
||||
pub async fn set_bot_status(&self, user_id: &str, is_bot: bool) -> ApiResult<AdminUser> {
|
||||
let body = generated_types::AdminUserBotStatusRequest { bot: is_bot };
|
||||
let response = self
|
||||
.generated()
|
||||
.set_admin_user_bot_status(&snowflake(user_id), &body)
|
||||
.await
|
||||
.map_err(|e| self.generated_error(e))?;
|
||||
let resp: UserMutationResponse = self.generated_value(response.into_inner())?;
|
||||
Ok(resp.user)
|
||||
}
|
||||
|
||||
pub async fn set_system_status(&self, user_id: &str, is_system: bool) -> ApiResult<AdminUser> {
|
||||
let body = generated_types::AdminUserSystemStatusRequest { system: is_system };
|
||||
let response = self
|
||||
.generated()
|
||||
.set_admin_user_system_status(&snowflake(user_id), &body)
|
||||
.await
|
||||
.map_err(|e| self.generated_error(e))?;
|
||||
let resp: UserMutationResponse = self.generated_value(response.into_inner())?;
|
||||
Ok(resp.user)
|
||||
}
|
||||
|
||||
pub async fn change_username(
|
||||
&self,
|
||||
user_id: &str,
|
||||
|
||||
@@ -178,6 +178,22 @@ pub async fn dispatch(
|
||||
"Failed to clear user fields",
|
||||
)
|
||||
}
|
||||
"set_bot_status" => {
|
||||
let val = form.bool_value("bot");
|
||||
DispatchOutcome::from_result(
|
||||
client.set_bot_status(user_id, val).await,
|
||||
"Bot status updated successfully",
|
||||
"Failed to update bot status",
|
||||
)
|
||||
}
|
||||
"set_system_status" => {
|
||||
let val = form.bool_value("system");
|
||||
DispatchOutcome::from_result(
|
||||
client.set_system_status(user_id, val).await,
|
||||
"System status updated successfully",
|
||||
"Failed to update system status",
|
||||
)
|
||||
}
|
||||
"change_username" => {
|
||||
let Some(username) = get("username") else {
|
||||
return DispatchOutcome::error("Username is required");
|
||||
|
||||
@@ -52,6 +52,7 @@ pub fn account_tab(
|
||||
(sessions_card(config, sessions))
|
||||
(quick_actions_card(base, user, csrf_token, username_sign_in, can_revoke_recovery_kit))
|
||||
(clear_fields_card(base, user, csrf_token))
|
||||
(user_status_card(base, user, csrf_token))
|
||||
(security_actions_card(base, user, csrf_token))
|
||||
(webauthn_credentials_card(base, user, webauthn_credentials, csrf_token))
|
||||
}
|
||||
@@ -310,6 +311,19 @@ fn clear_fields_card(base: &str, user: &AdminUser, csrf_token: &str) -> Markup {
|
||||
}
|
||||
}
|
||||
|
||||
fn user_status_card(base: &str, user: &AdminUser, csrf_token: &str) -> Markup {
|
||||
let is_bot = user.bot;
|
||||
let is_sys = user.system;
|
||||
html! {
|
||||
(card_with_header("User Status", html! {
|
||||
div class="grid grid-cols-1 gap-4 md:grid-cols-2" {
|
||||
(status_toggle(base, &user.id, "set_bot_status", is_bot, "bot", csrf_token))
|
||||
(status_toggle(base, &user.id, "set_system_status", is_sys, "system", csrf_token))
|
||||
}
|
||||
}))
|
||||
}
|
||||
}
|
||||
|
||||
fn security_actions_card(base: &str, user: &AdminUser, csrf_token: &str) -> Markup {
|
||||
html! {
|
||||
(card_with_header("Security Actions", html! {
|
||||
@@ -450,3 +464,40 @@ fn action_form(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn status_toggle(
|
||||
base: &str,
|
||||
uid: &str,
|
||||
action: &str,
|
||||
active: bool,
|
||||
kind: &str,
|
||||
csrf: &str,
|
||||
) -> Markup {
|
||||
let status_val = if active { "false" } else { "true" };
|
||||
let label = format!(
|
||||
"{} {} Status",
|
||||
if active { "Remove" } else { "Set" },
|
||||
capitalize(kind)
|
||||
);
|
||||
let action_url = format!("{base}/users/{uid}?action={action}&status={status_val}&tab=account");
|
||||
html! {
|
||||
form method="post"
|
||||
action=(&action_url)
|
||||
hx-post=(&action_url)
|
||||
hx-target="#flash-container"
|
||||
hx-swap="none"
|
||||
hx-push-url="false" {
|
||||
(csrf_input(csrf))
|
||||
input type="hidden" name=(kind) value=(status_val);
|
||||
button type="submit" class=(BTN_CLS) { (label) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn capitalize(s: &str) -> String {
|
||||
let mut c = s.chars();
|
||||
match c.next() {
|
||||
None => String::new(),
|
||||
Some(f) => f.to_uppercase().chain(c).collect(),
|
||||
}
|
||||
}
|
||||
@@ -437,6 +437,11 @@ fn acls_card(
|
||||
(flag_checkbox("acls[]", item.to_string(), item, checked, true))
|
||||
}
|
||||
}
|
||||
@for item in &user.acls {
|
||||
@if !acl::ALL_ACLS.iter().any(|known| known == &item.as_str()) {
|
||||
input type="hidden" name="acls[]" value=(item);
|
||||
}
|
||||
}
|
||||
(form_actions(html! {
|
||||
(submit_button("Save ACLs"))
|
||||
}))
|
||||
|
||||
@@ -24,6 +24,7 @@ import {
|
||||
AdminUserAclsRequest,
|
||||
AdminUserBanNoteRequest,
|
||||
AdminUserBanRequest,
|
||||
AdminUserBotStatusRequest,
|
||||
AdminUserChangeLogQuery,
|
||||
AdminUserClearFieldsRequest,
|
||||
AdminUserDeletionCancelRequest,
|
||||
@@ -38,6 +39,7 @@ import {
|
||||
AdminUserPremiumFlagsUpdateRequest,
|
||||
AdminUserRelationshipCategoryQuery,
|
||||
AdminUserRelationshipParam,
|
||||
AdminUserSystemStatusRequest,
|
||||
AdminUsersMeResponse,
|
||||
AdminUserTraitsRequest,
|
||||
AdminUserUnbanRequest,
|
||||
@@ -601,6 +603,70 @@ export function UserAdminController(app: HonoApp) {
|
||||
);
|
||||
},
|
||||
);
|
||||
app.put(
|
||||
'/admin/users/:user_id/bot-status',
|
||||
RateLimitMiddleware(RateLimitConfigs.ADMIN_USER_MODIFY),
|
||||
requireAdminACL(AdminACLs.USER_UPDATE_BOT_STATUS),
|
||||
Validator('param', UserIdParam),
|
||||
Validator('json', AdminUserBotStatusRequest),
|
||||
OpenAPI({
|
||||
operationId: 'set_admin_user_bot_status',
|
||||
summary: 'Set user bot status',
|
||||
responseSchema: UserMutationResponse,
|
||||
statusCode: 200,
|
||||
security: 'adminApiKey',
|
||||
tags: 'Admin',
|
||||
description:
|
||||
'Mark or unmark a user account as a bot. Controls bot badge visibility and API permissions. Creates audit log entry. Requires USER_UPDATE_BOT_STATUS permission.',
|
||||
}),
|
||||
async (ctx) => {
|
||||
const adminService = ctx.get('adminService');
|
||||
const adminUserId = ctx.get('adminUserId');
|
||||
const auditLogReason = ctx.get('auditLogReason');
|
||||
const adminUserAcls = ctx.get('adminUserAcls');
|
||||
const {user_id: userId} = ctx.req.valid('param');
|
||||
return ctx.json(
|
||||
await adminService.userService.profileService.setUserBotStatus(
|
||||
{user_id: userId, ...ctx.req.valid('json')},
|
||||
adminUserId,
|
||||
auditLogReason,
|
||||
adminUserAcls,
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
app.put(
|
||||
'/admin/users/:user_id/system-status',
|
||||
RateLimitMiddleware(RateLimitConfigs.ADMIN_USER_MODIFY),
|
||||
requireAdminACL(AdminACLs.USER_UPDATE_BOT_STATUS),
|
||||
Validator('param', UserIdParam),
|
||||
Validator('json', AdminUserSystemStatusRequest),
|
||||
OpenAPI({
|
||||
operationId: 'set_admin_user_system_status',
|
||||
summary: 'Set user system status',
|
||||
responseSchema: UserMutationResponse,
|
||||
statusCode: 200,
|
||||
security: 'adminApiKey',
|
||||
tags: 'Admin',
|
||||
description:
|
||||
'Mark or unmark a user as a system account. System accounts have special permissions for automated operations. Creates audit log entry. Requires USER_UPDATE_BOT_STATUS permission.',
|
||||
}),
|
||||
async (ctx) => {
|
||||
const adminService = ctx.get('adminService');
|
||||
const adminUserId = ctx.get('adminUserId');
|
||||
const auditLogReason = ctx.get('auditLogReason');
|
||||
const adminUserAcls = ctx.get('adminUserAcls');
|
||||
const {user_id: userId} = ctx.req.valid('param');
|
||||
return ctx.json(
|
||||
await adminService.userService.profileService.setUserSystemStatus(
|
||||
{user_id: userId, ...ctx.req.valid('json')},
|
||||
adminUserId,
|
||||
auditLogReason,
|
||||
adminUserAcls,
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
app.patch(
|
||||
'/admin/users/:user_id/username',
|
||||
RateLimitMiddleware(RateLimitConfigs.ADMIN_USER_MODIFY),
|
||||
|
||||
@@ -15,6 +15,9 @@ import type {User} from '@app/api/models/User';
|
||||
import {enqueueStripeCustomerEmailSync} from '@app/api/stripe/StripeCustomer';
|
||||
import {assertNoDiscriminatorChange, reserveUsername, type UsernameReservation} from '@app/api/user/UniqueUsernames';
|
||||
import {USERNAME_MODE_DISCRIMINATOR} from '@app/api/user/UserTag';
|
||||
import {ValidationErrorCodes} from '@fluxer/constants/src/ValidationErrorCodes';
|
||||
import {AccessDeniedError} from '@fluxer/errors/src/domains/core/AccessDeniedError';
|
||||
import {InputValidationError} from '@fluxer/errors/src/domains/core/InputValidationError';
|
||||
import {TagAlreadyTakenError} from '@fluxer/errors/src/domains/user/TagAlreadyTakenError';
|
||||
import {UnknownUserError} from '@fluxer/errors/src/domains/user/UnknownUserError';
|
||||
import type {
|
||||
@@ -22,6 +25,8 @@ import type {
|
||||
ChangeEmailRequest,
|
||||
ChangeUsernameRequest,
|
||||
ClearUserFieldsRequest,
|
||||
SetUserBotStatusRequest,
|
||||
SetUserSystemStatusRequest,
|
||||
VerifyUserEmailRequest,
|
||||
} from '@fluxer/schema/src/domains/admin/AdminUserSchemas';
|
||||
import {types} from 'cassandra-driver';
|
||||
@@ -104,6 +109,75 @@ export class AdminUserProfileService {
|
||||
};
|
||||
}
|
||||
|
||||
async setUserBotStatus(
|
||||
data: SetUserBotStatusRequest,
|
||||
adminUserId: UserID,
|
||||
auditLogReason: string | null,
|
||||
acls: ReadonlySet<string>,
|
||||
) {
|
||||
const {users: userRepository, cache: cacheService} = this.deps.apiContext.services;
|
||||
const {auditService, updatePropagator} = this.deps;
|
||||
const userId = createUserID(data.user_id);
|
||||
const user = await userRepository.findUnique(userId);
|
||||
if (!user) {
|
||||
throw new UnknownUserError();
|
||||
}
|
||||
if (data.bot && user.acls.size > 0) {
|
||||
throw new AccessDeniedError();
|
||||
}
|
||||
const updates: Record<string, boolean> = {bot: data.bot};
|
||||
if (!data.bot) {
|
||||
updates['system'] = false;
|
||||
}
|
||||
const updatedUser = await userRepository.patchUpsert(userId, updates, user.toRow());
|
||||
await updatePropagator.propagateUserUpdate({userId, oldUser: user, updatedUser: updatedUser});
|
||||
await auditService.createAuditLog({
|
||||
adminUserId,
|
||||
targetType: 'user',
|
||||
targetId: BigInt(userId),
|
||||
action: 'set_bot_status',
|
||||
auditLogReason,
|
||||
metadata: new Map([['bot', data.bot.toString()]]),
|
||||
});
|
||||
return {
|
||||
user: await mapUserToAdminResponse(updatedUser, cacheService, acls),
|
||||
};
|
||||
}
|
||||
|
||||
async setUserSystemStatus(
|
||||
data: SetUserSystemStatusRequest,
|
||||
adminUserId: UserID,
|
||||
auditLogReason: string | null,
|
||||
acls: ReadonlySet<string>,
|
||||
) {
|
||||
const {users: userRepository, cache: cacheService} = this.deps.apiContext.services;
|
||||
const {auditService, updatePropagator} = this.deps;
|
||||
const userId = createUserID(data.user_id);
|
||||
const user = await userRepository.findUnique(userId);
|
||||
if (!user) {
|
||||
throw new UnknownUserError();
|
||||
}
|
||||
if (data.system && !user.isBot) {
|
||||
throw InputValidationError.fromCode(
|
||||
'system',
|
||||
ValidationErrorCodes.USER_MUST_BE_A_BOT_TO_BE_MARKED_AS_A_SYSTEM_USER,
|
||||
);
|
||||
}
|
||||
const updatedUser = await userRepository.patchUpsert(userId, {system: data.system}, user.toRow());
|
||||
await updatePropagator.propagateUserUpdate({userId, oldUser: user, updatedUser: updatedUser});
|
||||
await auditService.createAuditLog({
|
||||
adminUserId,
|
||||
targetType: 'user',
|
||||
targetId: BigInt(userId),
|
||||
action: 'set_system_status',
|
||||
auditLogReason,
|
||||
metadata: new Map([['system', data.system.toString()]]),
|
||||
});
|
||||
return {
|
||||
user: await mapUserToAdminResponse(updatedUser, cacheService, acls),
|
||||
};
|
||||
}
|
||||
|
||||
async verifyUserEmail(
|
||||
data: VerifyUserEmailRequest,
|
||||
adminUserId: UserID,
|
||||
|
||||
@@ -78,6 +78,7 @@ const adminEndpoints: Array<AdminEndpointCase> = [
|
||||
{method: 'GET', path: '/admin/users/1/webauthn-credentials', requiredACL: 'user:update:mfa'},
|
||||
{method: 'DELETE', path: '/admin/users/1/webauthn-credentials/credential', requiredACL: 'user:update:mfa'},
|
||||
{method: 'DELETE', path: '/admin/users/1/profile-fields', requiredACL: 'user:update:profile'},
|
||||
{method: 'PUT', path: '/admin/users/1/bot-status', requiredACL: 'user:update:bot_status'},
|
||||
{method: 'PUT', path: '/admin/users/1/acls', requiredACL: 'acl:set:user'},
|
||||
{method: 'PUT', path: '/admin/users/1/deletion', requiredACL: 'user:delete'},
|
||||
{method: 'POST', path: '/admin/users/1/avatar-block', requiredACL: 'ban:avatar_hash:add'},
|
||||
|
||||
@@ -20,6 +20,8 @@ const MUTATIONS: Array<{verb: 'put' | 'patch' | 'delete'; path: string; acl: str
|
||||
{verb: 'put', path: 'ban', acl: AdminACLs.USER_TEMP_BAN, body: {duration_hours: 1, reason: 'test'}},
|
||||
{verb: 'put', path: 'deletion', acl: AdminACLs.USER_DELETE, body: {delay_days: 1}},
|
||||
{verb: 'delete', path: 'profile-fields', acl: AdminACLs.USER_UPDATE_PROFILE, body: {fields: ['bio']}},
|
||||
{verb: 'put', path: 'bot-status', acl: AdminACLs.USER_UPDATE_BOT_STATUS, body: {bot: true}},
|
||||
{verb: 'put', path: 'system-status', acl: AdminACLs.USER_UPDATE_BOT_STATUS, body: {system: true}},
|
||||
];
|
||||
|
||||
const CASES = SYNTHETIC_USER_IDS.flatMap((userId) =>
|
||||
|
||||
@@ -191,6 +191,39 @@ export const UserWriteAdminAuditCases: ReadonlyArray<AdminAuditCoverageCase> = [
|
||||
};
|
||||
},
|
||||
},
|
||||
{
|
||||
method: 'PUT',
|
||||
route: '/admin/users/:user_id/bot-status',
|
||||
async prepare({harness}) {
|
||||
const target = await createTestAccount(harness);
|
||||
return {
|
||||
request: {path: `/admin/users/${target.userId}/bot-status`, body: {bot: true}},
|
||||
expected: {
|
||||
action: 'set_bot_status',
|
||||
targetType: 'user',
|
||||
targetId: target.userId,
|
||||
metadata: {bot: 'true'},
|
||||
},
|
||||
};
|
||||
},
|
||||
},
|
||||
{
|
||||
method: 'PUT',
|
||||
route: '/admin/users/:user_id/system-status',
|
||||
async prepare(context) {
|
||||
const target = await createTestAccount(context.harness);
|
||||
await adminBuilder(context).put(`/admin/users/${target.userId}/bot-status`).body({bot: true}).execute();
|
||||
return {
|
||||
request: {path: `/admin/users/${target.userId}/system-status`, body: {system: true}},
|
||||
expected: {
|
||||
action: 'set_system_status',
|
||||
targetType: 'user',
|
||||
targetId: target.userId,
|
||||
metadata: {system: 'true'},
|
||||
},
|
||||
};
|
||||
},
|
||||
},
|
||||
{
|
||||
method: 'PATCH',
|
||||
route: '/admin/users/:user_id/username',
|
||||
|
||||
@@ -140,7 +140,7 @@ The acting credential must already have every value in `acls`, unless it has `*`
|
||||
| --- | --- | --- |
|
||||
| name<sup>1</sup> | string | The name given to the key (1-100 characters) |
|
||||
| expires_in_days?<sup>2</sup> | integer | The number of days until the key expires (1-365) |
|
||||
| acls<sup>3</sup> | array[string] | The [ACLs](/admin-api/#acl-registry) stored on the key, each a registry value (at most 103) |
|
||||
| acls<sup>3</sup> | array[string] | The [ACLs](/admin-api/#acl-registry) stored on the key, each a registry value (at most 106) |
|
||||
|
||||
<sup>1</sup> A value that is empty after trimming is rejected, so whitespace alone is not a name
|
||||
|
||||
@@ -218,7 +218,7 @@ An update never rotates the credential, and no field on this route changes the e
|
||||
| Field | Type | Description |
|
||||
| --- | --- | --- |
|
||||
| name?<sup>1</sup> | string | The replacement name for the key (1-100 characters) |
|
||||
| acls?<sup>2</sup> | array[string] | The complete replacement set of [ACLs](/admin-api/#acl-registry), each a registry value (at most 103) |
|
||||
| acls?<sup>2</sup> | array[string] | The complete replacement set of [ACLs](/admin-api/#acl-registry), each a registry value (at most 106) |
|
||||
|
||||
<sup>1</sup> A value that is empty after trimming is rejected
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@ A body with none of those fields resolves to no ACL at all and applies no change
|
||||
|
||||
Fluxer checks each ACL an Admin grants against the ACLs that Admin holds. [Set user ACLs](/admin-api/users/#set-user-acls) and [Create Admin API key](/admin-api/api-keys/#create-admin-api-key) both refuse to write an ACL the acting Admin does not itself hold, with 403 `MISSING_ACL`. A wildcard holder is exempt. Set user ACLs also refuses the acting Admin's own account with 403 `ACCESS_DENIED`, and it looks up the target account before it checks the granted ACLs, so an unknown ID fails first with 404 `UNKNOWN_USER`.
|
||||
|
||||
[Set user ACLs](/admin-api/users/#set-user-acls), [Create Admin API key](/admin-api/api-keys/#create-admin-api-key), and [Update Admin API key](/admin-api/api-keys/#update-admin-api-key) each accept at most 103 ACLs and validate every entry against the registry, so a value outside it returns 400 `INVALID_FORM_BODY`.
|
||||
[Set user ACLs](/admin-api/users/#set-user-acls), [Create Admin API key](/admin-api/api-keys/#create-admin-api-key), and [Update Admin API key](/admin-api/api-keys/#update-admin-api-key) each accept at most 106 ACLs and validate every entry against the registry, so a value outside it returns 400 `INVALID_FORM_BODY`.
|
||||
|
||||
:::caution[`*` satisfies every present and future ACL]
|
||||
A key whose owning account holds `*` skips the owner check. An Admin holding `*` can grant any ACL.
|
||||
@@ -375,6 +375,8 @@ An entry with any other action has `access` set to `write`.
|
||||
| schedule_deletion | Account deletion was scheduled |
|
||||
| send_password_reset | A password reset message was requested for an account |
|
||||
| set_acls | The Admin ACL set of an account was replaced |
|
||||
| set_bot_status | The bot flag of an account was changed |
|
||||
| set_system_status | The system flag of an account was changed |
|
||||
| set_traits | Account traits were replaced |
|
||||
| shutdown_guild | One guild was stopped on the main Gateway |
|
||||
| system_dm.send | A system DM broadcast was created |
|
||||
@@ -476,7 +478,7 @@ Returns every Admin permission string the instance recognises, in [ACL registry]
|
||||
|
||||
| Field | Type | Description |
|
||||
| --- | --- | --- |
|
||||
| acls<sup>1</sup> | array[string] | The permission strings the Admin API recognises (at most 103 entries) |
|
||||
| acls<sup>1</sup> | array[string] | The permission strings the Admin API recognises (at most 106 entries) |
|
||||
|
||||
<sup>1</sup> The response is the registry itself and does not vary with the caller's own ACL set
|
||||
|
||||
@@ -591,6 +593,7 @@ The registry is returned in this order by [List ACLs](#list-acls). A value outsi
|
||||
| user:view:email<sup>6</sup> | Unredacts user email addresses and email verification state |
|
||||
| user:view:ip<sup>6</sup> | Unredacts the last active IP address and the location derived from it |
|
||||
| user:temp_ban | Applies and removes an account ban |
|
||||
| user:update:bot_status | Updates bot and system account state |
|
||||
| user:update:dob | Updates dates of birth |
|
||||
| user:update:email | Updates the email address, marks the address verified, resends verification, and sends a password reset |
|
||||
| user:update:flags | Updates account flags and premium flags, refreshes in-app purchases, and ends every login session of an account |
|
||||
|
||||
@@ -59,7 +59,7 @@ When the caller lacks `user:view:email`, `user:view:dob`, or `user:view:ip`, Flu
|
||||
| deletion_audit_log_reason | ?string | The private reason stored with the pending deletion, and null without `audit_log:view` |
|
||||
| deletion_scheduled_by | ?snowflake | The ID of the account that scheduled the pending deletion, or null when it was not recorded |
|
||||
| deletion_scheduled_at | ?ISO8601 timestamp | The time the pending deletion was scheduled, or null when it was not recorded |
|
||||
| acls<sup>7</sup> | array[string] | Effective [Admin ACLs](/admin-api/#acl-registry), with at most 103 entries |
|
||||
| acls<sup>7</sup> | array[string] | Effective [Admin ACLs](/admin-api/#acl-registry), with at most 106 entries |
|
||||
| traits<sup>8</sup> | array[string] | The free-form operator labels set on the account, with at most 100 entries |
|
||||
| has_totp<sup>9</sup> | boolean | Whether a TOTP authenticator is registered |
|
||||
| authenticator_types<sup>9</sup> <sup>12</sup> | array[integer] | Registered [authenticator types](/http-api/users/#authenticator-types), with at most 10 entries |
|
||||
@@ -1030,6 +1030,97 @@ The operation records one [Admin audit entry](/admin-api/#admin-audit-entry-obje
|
||||
|
||||
100 requests per minute for each authenticated user, on the `admin:user:modify` bucket.
|
||||
|
||||
## Set user bot status
|
||||
|
||||
<RouteHeader method="PUT" path="/v1/admin/users/{user_id}/bot-status" auditReason />
|
||||
|
||||
Marks the account as a bot or as an ordinary account, and returns the resulting account. Requires `user:update:bot_status`.
|
||||
|
||||
### Path parameters
|
||||
|
||||
| Field | Type | Description |
|
||||
| --- | --- | --- |
|
||||
| user_id | snowflake | The ID of the target account |
|
||||
|
||||
### JSON body
|
||||
|
||||
| Field | Type | Description |
|
||||
| --- | --- | --- |
|
||||
| bot<sup>1</sup> | boolean | Whether the account is a bot |
|
||||
|
||||
<sup>1</sup> Required. Setting it to false also clears `system` in the same write
|
||||
|
||||
### Response body
|
||||
|
||||
| Field | Type | Description |
|
||||
| --- | --- | --- |
|
||||
| user | [Admin user](#admin-user-object) object | The resulting account |
|
||||
|
||||
### Response
|
||||
|
||||
| Status | Body | Condition |
|
||||
| --- | --- | --- |
|
||||
| 200 | response body | Bot status was set |
|
||||
| 403<sup>1</sup> | [error response](/admin-api/#error-response) | Credential type or ACL evaluation denies the request. `ACCESS_DENIED` when the target holds an Admin ACL and `bot` is true |
|
||||
| 404 | [error response](/admin-api/#error-response) | `UNKNOWN_USER`, because the account does not exist |
|
||||
|
||||
<sup>1</sup> A staff account cannot be converted into a bot. Clear its ACL set with [Set user ACLs](#set-user-acls) first
|
||||
|
||||
### Side effects
|
||||
|
||||
[User Update](/gateway/events/#user-update) is emitted to the account's own sessions, and each guild the account is a member of receives [Guild Member Update](/gateway/events/#guild-member-update) when the write changes `bot` or `system`.
|
||||
|
||||
The operation records one [Admin audit entry](/admin-api/#admin-audit-entry-object) with action `set_bot_status`, target type `user`, and a metadata key `bot`. Clearing `system` as a side effect records no second entry.
|
||||
|
||||
### Rate limit
|
||||
|
||||
100 requests per minute for each authenticated user, on the `admin:user:modify` bucket.
|
||||
|
||||
## Set user system status
|
||||
|
||||
<RouteHeader method="PUT" path="/v1/admin/users/{user_id}/system-status" auditReason />
|
||||
|
||||
Marks the account as an official system account or removes that marker, and returns the resulting account. Requires `user:update:bot_status`, the same ACL as [Set user bot status](#set-user-bot-status).
|
||||
|
||||
### Path parameters
|
||||
|
||||
| Field | Type | Description |
|
||||
| --- | --- | --- |
|
||||
| user_id | snowflake | The ID of the target account |
|
||||
|
||||
### JSON body
|
||||
|
||||
| Field | Type | Description |
|
||||
| --- | --- | --- |
|
||||
| system<sup>1</sup> | boolean | Whether the account is a system account |
|
||||
|
||||
<sup>1</sup> Required. Setting it to true on an account that is not already a bot fails validation
|
||||
|
||||
### Response body
|
||||
|
||||
| Field | Type | Description |
|
||||
| --- | --- | --- |
|
||||
| user | [Admin user](#admin-user-object) object | The resulting account |
|
||||
|
||||
### Response
|
||||
|
||||
| Status | Body | Condition |
|
||||
| --- | --- | --- |
|
||||
| 200 | response body | System status was set |
|
||||
| 404 | [error response](/admin-api/#error-response) | `UNKNOWN_USER`, because the account does not exist |
|
||||
|
||||
<sup>1</sup> The non-bot case is `INVALID_FORM_BODY` with the validation code `USER_MUST_BE_A_BOT_TO_BE_MARKED_AS_A_SYSTEM_USER` on the `system` path
|
||||
|
||||
### Side effects
|
||||
|
||||
[User Update](/gateway/events/#user-update) is emitted to the account's own sessions, and each guild the account is a member of receives [Guild Member Update](/gateway/events/#guild-member-update) when the write changes `system`.
|
||||
|
||||
The operation records one [Admin audit entry](/admin-api/#admin-audit-entry-object) with action `set_system_status`, target type `user`, and a metadata key `system`.
|
||||
|
||||
### Rate limit
|
||||
|
||||
100 requests per minute for each authenticated user, on the `admin:user:modify` bucket.
|
||||
|
||||
## Set user ACLs
|
||||
|
||||
<RouteHeader method="PUT" path="/v1/admin/users/{user_id}/acls" auditReason />
|
||||
@@ -1056,7 +1147,7 @@ A path naming the acting account fails with 403 `ACCESS_DENIED` before the accou
|
||||
|
||||
| Field | Type | Description |
|
||||
| --- | --- | --- |
|
||||
| acls<sup>1</sup> | array[string] | Replacement [Admin ACLs](/admin-api/#acl-registry), with at most 103 values |
|
||||
| acls<sup>1</sup> | array[string] | Replacement [Admin ACLs](/admin-api/#acl-registry), with at most 106 values |
|
||||
|
||||
<sup>1</sup> Required. A value outside the [ACL registry](/admin-api/#acl-registry) fails body validation, and a repeated value is collapsed
|
||||
|
||||
|
||||
@@ -2081,6 +2081,10 @@ This user doesn't have an email address
|
||||
|
||||
This user isn't banned
|
||||
|
||||
### `USER_MUST_BE_A_BOT_TO_BE_MARKED_AS_A_SYSTEM_USER`
|
||||
|
||||
User must be a bot to be marked as a system user
|
||||
|
||||
### `USER_NOT_IN_CHANNEL`
|
||||
|
||||
This user isn't in the channel
|
||||
|
||||
@@ -91,6 +91,7 @@ export const AdminACLs = {
|
||||
USER_VIEW_EMAIL: 'user:view:email',
|
||||
USER_VIEW_IP: 'user:view:ip',
|
||||
USER_TEMP_BAN: 'user:temp_ban',
|
||||
USER_UPDATE_BOT_STATUS: 'user:update:bot_status',
|
||||
USER_UPDATE_DOB: 'user:update:dob',
|
||||
USER_UPDATE_EMAIL: 'user:update:email',
|
||||
USER_UPDATE_FLAGS: 'user:update:flags',
|
||||
|
||||
@@ -213,6 +213,7 @@ export const ValidationErrorCodes = {
|
||||
URL_NOT_PUBLICLY_ROUTABLE: 'URL_NOT_PUBLICLY_ROUTABLE',
|
||||
USER_DOES_NOT_HAVE_AN_EMAIL_ADDRESS: 'USER_DOES_NOT_HAVE_AN_EMAIL_ADDRESS',
|
||||
USER_IS_NOT_BANNED: 'USER_IS_NOT_BANNED',
|
||||
USER_MUST_BE_A_BOT_TO_BE_MARKED_AS_A_SYSTEM_USER: 'USER_MUST_BE_A_BOT_TO_BE_MARKED_AS_A_SYSTEM_USER',
|
||||
USER_NOT_IN_CHANNEL: 'USER_NOT_IN_CHANNEL',
|
||||
USERNAME_ALREADY_TAKEN: 'USERNAME_ALREADY_TAKEN',
|
||||
USERNAME_CANNOT_CONTAIN_RESERVED_TERMS: 'USERNAME_CANNOT_CONTAIN_RESERVED_TERMS',
|
||||
|
||||
@@ -432,6 +432,8 @@ export const ErrorCodeToI18nKey = {
|
||||
[ValidationErrorCodes.VISIONARY_REQUIRED_FOR_DISCRIMINATOR]: 'premium_and_plans.visionary_required_for_discriminator',
|
||||
[ValidationErrorCodes.BOT_DISCRIMINATOR_CANNOT_BE_CHANGED]: 'bots.bot_discriminator_cannot_be_changed',
|
||||
[ValidationErrorCodes.BOT_SEARCH_SCOPE_UNAVAILABLE]: 'bots.search_scope_unavailable',
|
||||
[ValidationErrorCodes.USER_MUST_BE_A_BOT_TO_BE_MARKED_AS_A_SYSTEM_USER]:
|
||||
'admin_and_system.user_must_be_bot_for_system_user',
|
||||
[ValidationErrorCodes.USER_IS_NOT_BANNED]: 'moderation_and_reports.user_is_not_banned',
|
||||
[ValidationErrorCodes.NCMEC_ATTACHMENT_MUST_BE_IMAGE_OR_VIDEO]:
|
||||
'moderation_and_reports.ncmec_attachment_must_be_image_or_video',
|
||||
|
||||
@@ -44,6 +44,7 @@ export const ERROR_I18N_MESSAGES = {
|
||||
'admin_and_system.test_harness_disabled': 'Test harness is disabled.',
|
||||
'admin_and_system.test_harness_forbidden': 'Test harness is forbidden.',
|
||||
'admin_and_system.update_failed': "We couldn't update the resource. Please try again.",
|
||||
'admin_and_system.user_must_be_bot_for_system_user': 'User must be a bot to be marked as a system user.',
|
||||
'age_verification.already_verified': "You've already completed age verification.",
|
||||
'attachments_and_uploads.attachment_fields_required':
|
||||
'`attachment_id`, `channel_id`, `message_id`, and `expires_at` are required.',
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_AR_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "أداة الاختبار معطلة.",
|
||||
"admin_and_system.test_harness_forbidden": "أداة الاختبار محظورة.",
|
||||
"admin_and_system.update_failed": "لم نتمكن من تحديث المورد. حاول مجددًا.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "يجب أن يكون المستخدم بوتًا ليتم تحديده كمستخدم نظام.",
|
||||
"age_verification.already_verified": "لقد أكملت التحقق من العمر بالفعل.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id` و`channel_id` و`message_id` و`expires_at` مطلوبة.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "يجب أن تكون `attachment_id` و`channel_id` و`message_id` أعدادًا صحيحة صالحة.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_BG_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "Тестовата система е деактивирана.",
|
||||
"admin_and_system.test_harness_forbidden": "Тестовата система е забранена.",
|
||||
"admin_and_system.update_failed": "Не успяхме да актуализираме ресурса. Опитай отново.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Потребителят трябва да бъде бот, за да бъде маркиран като системен потребител.",
|
||||
"age_verification.already_verified": "Вече премина проверката за възраст.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` и `expires_at` са задължителни.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` и `message_id` трябва да са валидни цели числа.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_CS_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "Testovací prostředí je vypnuté.",
|
||||
"admin_and_system.test_harness_forbidden": "Přístup k testovacímu prostředí je zakázán.",
|
||||
"admin_and_system.update_failed": "Nepodařilo se aktualizovat zdroj. Zkuste to znovu.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Uživatel musí být bot, aby mohl být označen jako systémový uživatel.",
|
||||
"age_verification.already_verified": "Ověření věku už bylo dokončeno.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` a `expires_at` jsou povinné.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` a `message_id` musí být platné celočíselné hodnoty.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_DA_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "Testmiljøet er deaktiveret.",
|
||||
"admin_and_system.test_harness_forbidden": "Adgang til testmiljøet er ikke tilladt.",
|
||||
"admin_and_system.update_failed": "Ressourcen kunne ikke opdateres. Prøv igen.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Brugeren skal være en bot for at kunne markeres som systembruger.",
|
||||
"age_verification.already_verified": "Du har allerede gennemført aldersbekræftelse.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` og `expires_at` er påkrævet.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` og `message_id` skal være gyldige heltal.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_DE_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "Test-Harness ist deaktiviert.",
|
||||
"admin_and_system.test_harness_forbidden": "Test-Harness ist verboten.",
|
||||
"admin_and_system.update_failed": "Wir konnten die Ressource nicht aktualisieren. Bitte versuche es erneut.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Ein Benutzer muss ein Bot sein, um als Systembenutzer markiert zu werden.",
|
||||
"age_verification.already_verified": "Du hast die Altersbestätigung bereits abgeschlossen.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` und `expires_at` sind erforderlich.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` und `message_id` müssen gültige Ganzzahlen sein.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_EL_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "Το test harness είναι απενεργοποιημένο.",
|
||||
"admin_and_system.test_harness_forbidden": "Το test harness απαγορεύεται.",
|
||||
"admin_and_system.update_failed": "Δεν μπορέσαμε να ενημερώσουμε τον πόρο. Δοκίμασε ξανά.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Ο χρήστης πρέπει να είναι bot για να οριστεί ως χρήστης συστήματος.",
|
||||
"age_verification.already_verified": "Έχεις ήδη ολοκληρώσει την επαλήθευση ηλικίας.",
|
||||
"attachments_and_uploads.attachment_fields_required": "Τα `attachment_id`, `channel_id`, `message_id` και `expires_at` είναι υποχρεωτικά.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "Τα `attachment_id`, `channel_id` και `message_id` πρέπει να είναι έγκυροι ακέραιοι αριθμοί.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_EN_GB_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "Test harness is disabled.",
|
||||
"admin_and_system.test_harness_forbidden": "Test harness is forbidden.",
|
||||
"admin_and_system.update_failed": "We couldn't update the resource. Please try again.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "User must be a bot to be marked as a system user.",
|
||||
"age_verification.already_verified": "You've already completed age verification.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id`, and `expires_at` are required.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id`, and `message_id` must be valid integers.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_ES_419_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "El entorno de prueba está deshabilitado.",
|
||||
"admin_and_system.test_harness_forbidden": "El entorno de prueba está prohibido.",
|
||||
"admin_and_system.update_failed": "No se pudo actualizar el recurso. Inténtalo de nuevo.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "El usuario debe ser un bot para ser marcado como usuario del sistema.",
|
||||
"age_verification.already_verified": "Ya completaste la verificación de edad.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` y `expires_at` son obligatorios.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` y `message_id` deben ser enteros válidos.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_ES_ES_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "El entorno de pruebas está deshabilitado.",
|
||||
"admin_and_system.test_harness_forbidden": "El entorno de pruebas está prohibido.",
|
||||
"admin_and_system.update_failed": "No se pudo actualizar el recurso. Inténtalo de nuevo.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "El usuario debe ser un bot para ser marcado como usuario del sistema.",
|
||||
"age_verification.already_verified": "Ya has completado la verificación de edad.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` y `expires_at` son obligatorios.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` y `message_id` deben ser enteros válidos.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_FI_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "Testausympäristö on poistettu käytöstä.",
|
||||
"admin_and_system.test_harness_forbidden": "Testausympäristö on kielletty.",
|
||||
"admin_and_system.update_failed": "Resurssia ei voitu päivittää. Yritä uudelleen.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Käyttäjän on oltava botti, jotta sen voi merkitä järjestelmäkäyttäjäksi.",
|
||||
"age_verification.already_verified": "Olet jo suorittanut iän vahvistuksen.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` ja `expires_at` ovat pakollisia.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "Seuraavien kenttien arvojen on oltava kelvollisia kokonaislukuja: `attachment_id`, `channel_id` ja `message_id`.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_FR_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "Le banc de test est désactivé.",
|
||||
"admin_and_system.test_harness_forbidden": "Le banc de test est interdit.",
|
||||
"admin_and_system.update_failed": "Impossible de mettre à jour la ressource. Réessayez.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "L'utilisateur doit être un bot pour être marqué comme utilisateur système.",
|
||||
"age_verification.already_verified": "Vous avez déjà effectué la vérification de l’âge.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` et `expires_at` sont nécessaires.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` et `message_id` doivent être des entiers valides.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_HE_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "כלי הבדיקה מושבת.",
|
||||
"admin_and_system.test_harness_forbidden": "השימוש בכלי הבדיקה אסור.",
|
||||
"admin_and_system.update_failed": "לא הצלחנו לעדכן את המשאב. ניתן לנסות שוב.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "המשתמש חייב להיות בוט כדי להיות מוגדר כמשתמש מערכת.",
|
||||
"age_verification.already_verified": "כבר השלמת את אימות הגיל.",
|
||||
"attachments_and_uploads.attachment_fields_required": "יש לציין את `attachment_id`, `channel_id`, `message_id` ו-`expires_at`.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` ו-`message_id` חייבים להיות מספרים שלמים תקינים.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_HI_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "Test harness डिसेबल है।",
|
||||
"admin_and_system.test_harness_forbidden": "Test harness की अनुमति नहीं है।",
|
||||
"admin_and_system.update_failed": "रिसोर्स अपडेट नहीं किया जा सका। कृपया फिर से कोशिश करें।",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "सिस्टम यूज़र के रूप में मार्क किए जाने के लिए यूज़र का बॉट होना ज़रूरी है।",
|
||||
"age_verification.already_verified": "आपने पहले ही एज वेरिफ़िकेशन पूरा कर लिया है।",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id`, और `expires_at` ज़रूरी हैं।",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id`, और `message_id` मान्य इंटीजर होने चाहिए।",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_HR_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "Testni sustav je onemogućen.",
|
||||
"admin_and_system.test_harness_forbidden": "Testni sustav je zabranjen.",
|
||||
"admin_and_system.update_failed": "Nismo mogli ažurirati resurs. Pokušaj ponovno.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Korisnik mora biti bot da bi bio označen kao sistemski korisnik.",
|
||||
"age_verification.already_verified": "Provjera dobi je već završena.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` i `expires_at` su obavezni.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` i `message_id` moraju biti valjani cijeli brojevi.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_HU_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "A tesztkeretrendszer ki van kapcsolva.",
|
||||
"admin_and_system.test_harness_forbidden": "A tesztkeretrendszer használata nem engedélyezett.",
|
||||
"admin_and_system.update_failed": "Nem sikerült frissíteni az erőforrást. Próbáld újra.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Csak botfelhasználó jelölhető meg rendszerfelhasználóként.",
|
||||
"age_verification.already_verified": "Már elvégezted a korhatár-ellenőrzést.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` és `expires_at` megadása kötelező.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` és `message_id` érvényes egész számoknak kell lenniük.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_ID_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "Test harness dinonaktifkan.",
|
||||
"admin_and_system.test_harness_forbidden": "Test harness dilarang.",
|
||||
"admin_and_system.update_failed": "Tidak bisa memperbarui sumber daya. Coba lagi.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Pengguna harus bot untuk ditandai sebagai pengguna sistem.",
|
||||
"age_verification.already_verified": "Kamu sudah menyelesaikan verifikasi usia.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id`, dan `expires_at` diperlukan.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id`, dan `message_id` harus berupa bilangan bulat yang valid.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_IT_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "Ambiente di test disabilitato.",
|
||||
"admin_and_system.test_harness_forbidden": "Ambiente di test vietato.",
|
||||
"admin_and_system.update_failed": "Non è stato possibile aggiornare la risorsa. Riprova.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "L'utente deve essere un bot per essere contrassegnato come utente di sistema.",
|
||||
"age_verification.already_verified": "Hai già completato la verifica dell'età.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` e `expires_at` sono richiesti.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` e `message_id` devono essere interi validi.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_JA_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "テストハーネスは無効です。",
|
||||
"admin_and_system.test_harness_forbidden": "テストハーネスは禁止されています。",
|
||||
"admin_and_system.update_failed": "リソースを更新できませんでした。もう一度お試しください。",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "システムユーザーとしてマークするには、ユーザーはボットである必要があります。",
|
||||
"age_verification.already_verified": "年齢確認はすでに完了しています。",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`、`channel_id`、`message_id`、`expires_at`は必須です。",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`、`channel_id`、`message_id`は有効な整数である必要があります。",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_KO_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "테스트 하네스가 비활성화되었어요.",
|
||||
"admin_and_system.test_harness_forbidden": "테스트 하네스 사용이 금지되어 있어요.",
|
||||
"admin_and_system.update_failed": "리소스를 업데이트하지 못했어요. 다시 시도해 주세요.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "시스템 사용자로 표시하려면 봇이어야 해요.",
|
||||
"age_verification.already_verified": "연령 인증을 이미 완료했어요.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id`, `expires_at`이 모두 필요해요.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id`, `message_id`는 모두 유효한 정수여야 해요.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_LT_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "Testavimo sistema išjungta.",
|
||||
"admin_and_system.test_harness_forbidden": "Testavimo sistema draudžiama.",
|
||||
"admin_and_system.update_failed": "Ištekliaus atnaujinti nepavyko. Pabandyk dar kartą.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Naudotojas turi būti botas, kad jį būtų galima pažymėti kaip sistemos naudotoją.",
|
||||
"age_verification.already_verified": "Amžiaus patvirtinimą jau atlikai.",
|
||||
"attachments_and_uploads.attachment_fields_required": "Reikalingi: `attachment_id`, `channel_id`, `message_id` ir `expires_at`.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` ir `message_id` turi būti galiojantys sveikieji skaičiai.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_NL_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "Testfunctionaliteit is uitgeschakeld.",
|
||||
"admin_and_system.test_harness_forbidden": "Testfunctionaliteit is verboden.",
|
||||
"admin_and_system.update_failed": "We konden het item niet bijwerken. Probeer het opnieuw.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Gebruiker moet een bot zijn om als systeemgebruiker te worden gemarkeerd.",
|
||||
"age_verification.already_verified": "Je hebt de leeftijdsverificatie al voltooid.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` en `expires_at` zijn verplicht.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` en `message_id` moeten geldige gehele getallen zijn.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_NO_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "Testrammeverket er deaktivert.",
|
||||
"admin_and_system.test_harness_forbidden": "Testrammeverket er ikke tillatt.",
|
||||
"admin_and_system.update_failed": "Vi kunne ikke oppdatere ressursen. Prøv på nytt.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Brukeren må være en bot for å bli merket som en systembruker.",
|
||||
"age_verification.already_verified": "Du har allerede fullført aldersverifisering.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` og `expires_at` er påkrevd.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` og `message_id` må være gyldige heltall.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_PL_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "Środowisko testowe wyłączone.",
|
||||
"admin_and_system.test_harness_forbidden": "Środowisko testowe zabronione.",
|
||||
"admin_and_system.update_failed": "Nie udało się zaktualizować zasobu. Spróbuj jeszcze raz.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Użytkownik musi być botem, aby mógł być oznaczony jako użytkownik systemowy.",
|
||||
"age_verification.already_verified": "Weryfikacja wieku została już zakończona.",
|
||||
"attachments_and_uploads.attachment_fields_required": "Wymagane: `attachment_id`, `channel_id`, `message_id` i `expires_at`.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` i `message_id` muszą być prawidłowymi liczbami całkowitymi.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_PT_BR_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "A ferramenta de teste está desativada.",
|
||||
"admin_and_system.test_harness_forbidden": "A ferramenta de teste é proibida.",
|
||||
"admin_and_system.update_failed": "Não foi possível atualizar o recurso. Tente de novo.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "O usuário deve ser um bot para ser marcado como usuário de sistema.",
|
||||
"age_verification.already_verified": "Você já concluiu a verificação de idade.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` e `expires_at` são obrigatórios.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` e `message_id` devem ser números inteiros válidos.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_RO_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "Cadrul de testare este dezactivat.",
|
||||
"admin_and_system.test_harness_forbidden": "Cadrul de testare este interzis.",
|
||||
"admin_and_system.update_failed": "Resursa nu a putut fi actualizată. Încearcă din nou.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Utilizatorul trebuie să fie un bot pentru a fi marcat ca utilizator de sistem.",
|
||||
"age_verification.already_verified": "Ai finalizat deja verificarea vârstei.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` și `expires_at` sunt obligatorii.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` și `message_id` trebuie să fie numere întregi valide.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_RU_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "Тестовый стенд отключён.",
|
||||
"admin_and_system.test_harness_forbidden": "Тестовый стенд запрещён.",
|
||||
"admin_and_system.update_failed": "Не удалось обновить ресурс. Попробуй ещё раз.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Пользователь должен быть ботом, чтобы отметить его как системного пользователя.",
|
||||
"age_verification.already_verified": "Возраст уже подтверждён.",
|
||||
"attachments_and_uploads.attachment_fields_required": "Необходимо указать `attachment_id`, `channel_id`, `message_id` и `expires_at`.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` и `message_id` должны быть действительными целыми числами.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_SV_SE_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "Testverktyget är inaktiverat.",
|
||||
"admin_and_system.test_harness_forbidden": "Testverktyget är inte tillåtet.",
|
||||
"admin_and_system.update_failed": "Det gick inte att uppdatera resursen. Försök igen.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Användaren måste vara en bot för att markeras som en systemanvändare.",
|
||||
"age_verification.already_verified": "Du har redan slutfört åldersverifieringen.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` och `expires_at` krävs.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` och `message_id` måste vara giltiga heltal.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_TH_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "ปิดใช้งาน test harness แล้ว",
|
||||
"admin_and_system.test_harness_forbidden": "ไม่อนุญาตให้ใช้ test harness",
|
||||
"admin_and_system.update_failed": "ไม่สามารถอัปเดตทรัพยากรได้ โปรดลองอีกครั้ง",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "ผู้ใช้ต้องเป็นบอทจึงจะสามารถระบุว่าเป็นผู้ใช้ระบบได้",
|
||||
"age_verification.already_verified": "คุณยืนยันอายุเรียบร้อยแล้ว",
|
||||
"attachments_and_uploads.attachment_fields_required": "ต้องระบุ `attachment_id`, `channel_id`, `message_id` และ `expires_at`",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` และ `message_id` ต้องเป็นจำนวนเต็มที่ถูกต้อง",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_TR_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "Test altyapısı devre dışı.",
|
||||
"admin_and_system.test_harness_forbidden": "Test altyapısı yasak.",
|
||||
"admin_and_system.update_failed": "Kaynağı güncelleyemedik. Tekrar dene.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Kullanıcı, sistem kullanıcısı olarak işaretlenmek için bot olmalı.",
|
||||
"age_verification.already_verified": "Yaş doğrulamasını zaten tamamladın.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` ve `expires_at` gerekli.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` ve `message_id` geçerli tam sayı olmalı.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_UK_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "Тестову систему вимкнено.",
|
||||
"admin_and_system.test_harness_forbidden": "Тестову систему заборонено.",
|
||||
"admin_and_system.update_failed": "Не вдалося оновити ресурс. Спробуй ще раз.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Користувач має бути ботом, щоб його можна було позначити як системного користувача.",
|
||||
"age_verification.already_verified": "Перевірку віку вже пройдено.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` та `expires_at` є обов'язковими.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` та `message_id` мають бути дійсними цілими числами.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_VI_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "Tính năng test harness đã bị tắt.",
|
||||
"admin_and_system.test_harness_forbidden": "Tính năng test harness bị cấm.",
|
||||
"admin_and_system.update_failed": "Không thể cập nhật tài nguyên. Vui lòng thử lại.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Người dùng phải là bot mới được đánh dấu là người dùng hệ thống.",
|
||||
"age_verification.already_verified": "Bạn đã hoàn tất xác minh tuổi.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` và `expires_at` là bắt buộc.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` và `message_id` phải là các số nguyên hợp lệ.",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_ZH_CN_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "测试工具已禁用。",
|
||||
"admin_and_system.test_harness_forbidden": "禁止使用测试工具。",
|
||||
"admin_and_system.update_failed": "无法更新资源。请重试。",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "用户必须是机器人才能被标记为系统用户。",
|
||||
"age_verification.already_verified": "你已完成年龄验证。",
|
||||
"attachments_and_uploads.attachment_fields_required": "需要提供 `attachment_id`、`channel_id`、`message_id` 和 `expires_at`。",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`、`channel_id` 和 `message_id` 必须是有效的整数。",
|
||||
|
||||
@@ -42,6 +42,7 @@ const ERROR_I18N_ZH_TW_MESSAGES = defineErrorI18nLocaleMessages({
|
||||
"admin_and_system.test_harness_disabled": "測試工具已停用。",
|
||||
"admin_and_system.test_harness_forbidden": "禁止使用測試工具。",
|
||||
"admin_and_system.update_failed": "我們無法更新資源。請再試一次。",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "使用者必須是機器人才能標記為系統使用者。",
|
||||
"age_verification.already_verified": "你已完成年齡驗證。",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`、`channel_id`、`message_id` 和 `expires_at` 為必填。",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`、`channel_id` 和 `message_id` 必須為有效的整數。",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "أداة الاختبار معطلة.",
|
||||
"admin_and_system.test_harness_forbidden": "أداة الاختبار محظورة.",
|
||||
"admin_and_system.update_failed": "لم نتمكن من تحديث المورد. حاول مجددًا.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "يجب أن يكون المستخدم بوتًا ليتم تحديده كمستخدم نظام.",
|
||||
"age_verification.already_verified": "لقد أكملت التحقق من العمر بالفعل.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id` و`channel_id` و`message_id` و`expires_at` مطلوبة.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "يجب أن تكون `attachment_id` و`channel_id` و`message_id` أعدادًا صحيحة صالحة.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "Тестовата система е деактивирана.",
|
||||
"admin_and_system.test_harness_forbidden": "Тестовата система е забранена.",
|
||||
"admin_and_system.update_failed": "Не успяхме да актуализираме ресурса. Опитай отново.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Потребителят трябва да бъде бот, за да бъде маркиран като системен потребител.",
|
||||
"age_verification.already_verified": "Вече премина проверката за възраст.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` и `expires_at` са задължителни.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` и `message_id` трябва да са валидни цели числа.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "Testovací prostředí je vypnuté.",
|
||||
"admin_and_system.test_harness_forbidden": "Přístup k testovacímu prostředí je zakázán.",
|
||||
"admin_and_system.update_failed": "Nepodařilo se aktualizovat zdroj. Zkuste to znovu.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Uživatel musí být bot, aby mohl být označen jako systémový uživatel.",
|
||||
"age_verification.already_verified": "Ověření věku už bylo dokončeno.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` a `expires_at` jsou povinné.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` a `message_id` musí být platné celočíselné hodnoty.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "Testmiljøet er deaktiveret.",
|
||||
"admin_and_system.test_harness_forbidden": "Adgang til testmiljøet er ikke tilladt.",
|
||||
"admin_and_system.update_failed": "Ressourcen kunne ikke opdateres. Prøv igen.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Brugeren skal være en bot for at kunne markeres som systembruger.",
|
||||
"age_verification.already_verified": "Du har allerede gennemført aldersbekræftelse.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` og `expires_at` er påkrævet.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` og `message_id` skal være gyldige heltal.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "Test-Harness ist deaktiviert.",
|
||||
"admin_and_system.test_harness_forbidden": "Test-Harness ist verboten.",
|
||||
"admin_and_system.update_failed": "Wir konnten die Ressource nicht aktualisieren. Bitte versuche es erneut.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Ein Benutzer muss ein Bot sein, um als Systembenutzer markiert zu werden.",
|
||||
"age_verification.already_verified": "Du hast die Altersbestätigung bereits abgeschlossen.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` und `expires_at` sind erforderlich.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` und `message_id` müssen gültige Ganzzahlen sein.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "Το test harness είναι απενεργοποιημένο.",
|
||||
"admin_and_system.test_harness_forbidden": "Το test harness απαγορεύεται.",
|
||||
"admin_and_system.update_failed": "Δεν μπορέσαμε να ενημερώσουμε τον πόρο. Δοκίμασε ξανά.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Ο χρήστης πρέπει να είναι bot για να οριστεί ως χρήστης συστήματος.",
|
||||
"age_verification.already_verified": "Έχεις ήδη ολοκληρώσει την επαλήθευση ηλικίας.",
|
||||
"attachments_and_uploads.attachment_fields_required": "Τα `attachment_id`, `channel_id`, `message_id` και `expires_at` είναι υποχρεωτικά.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "Τα `attachment_id`, `channel_id` και `message_id` πρέπει να είναι έγκυροι ακέραιοι αριθμοί.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "Test harness is disabled.",
|
||||
"admin_and_system.test_harness_forbidden": "Test harness is forbidden.",
|
||||
"admin_and_system.update_failed": "We couldn't update the resource. Please try again.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "User must be a bot to be marked as a system user.",
|
||||
"age_verification.already_verified": "You've already completed age verification.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id`, and `expires_at` are required.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id`, and `message_id` must be valid integers.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "El entorno de prueba está deshabilitado.",
|
||||
"admin_and_system.test_harness_forbidden": "El entorno de prueba está prohibido.",
|
||||
"admin_and_system.update_failed": "No se pudo actualizar el recurso. Inténtalo de nuevo.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "El usuario debe ser un bot para ser marcado como usuario del sistema.",
|
||||
"age_verification.already_verified": "Ya completaste la verificación de edad.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` y `expires_at` son obligatorios.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` y `message_id` deben ser enteros válidos.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "El entorno de pruebas está deshabilitado.",
|
||||
"admin_and_system.test_harness_forbidden": "El entorno de pruebas está prohibido.",
|
||||
"admin_and_system.update_failed": "No se pudo actualizar el recurso. Inténtalo de nuevo.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "El usuario debe ser un bot para ser marcado como usuario del sistema.",
|
||||
"age_verification.already_verified": "Ya has completado la verificación de edad.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` y `expires_at` son obligatorios.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` y `message_id` deben ser enteros válidos.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "Testausympäristö on poistettu käytöstä.",
|
||||
"admin_and_system.test_harness_forbidden": "Testausympäristö on kielletty.",
|
||||
"admin_and_system.update_failed": "Resurssia ei voitu päivittää. Yritä uudelleen.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Käyttäjän on oltava botti, jotta sen voi merkitä järjestelmäkäyttäjäksi.",
|
||||
"age_verification.already_verified": "Olet jo suorittanut iän vahvistuksen.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` ja `expires_at` ovat pakollisia.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "Seuraavien kenttien arvojen on oltava kelvollisia kokonaislukuja: `attachment_id`, `channel_id` ja `message_id`.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "Le banc de test est désactivé.",
|
||||
"admin_and_system.test_harness_forbidden": "Le banc de test est interdit.",
|
||||
"admin_and_system.update_failed": "Impossible de mettre à jour la ressource. Réessayez.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "L'utilisateur doit être un bot pour être marqué comme utilisateur système.",
|
||||
"age_verification.already_verified": "Vous avez déjà effectué la vérification de l’âge.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` et `expires_at` sont nécessaires.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` et `message_id` doivent être des entiers valides.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "כלי הבדיקה מושבת.",
|
||||
"admin_and_system.test_harness_forbidden": "השימוש בכלי הבדיקה אסור.",
|
||||
"admin_and_system.update_failed": "לא הצלחנו לעדכן את המשאב. ניתן לנסות שוב.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "המשתמש חייב להיות בוט כדי להיות מוגדר כמשתמש מערכת.",
|
||||
"age_verification.already_verified": "כבר השלמת את אימות הגיל.",
|
||||
"attachments_and_uploads.attachment_fields_required": "יש לציין את `attachment_id`, `channel_id`, `message_id` ו-`expires_at`.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` ו-`message_id` חייבים להיות מספרים שלמים תקינים.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "Test harness डिसेबल है।",
|
||||
"admin_and_system.test_harness_forbidden": "Test harness की अनुमति नहीं है।",
|
||||
"admin_and_system.update_failed": "रिसोर्स अपडेट नहीं किया जा सका। कृपया फिर से कोशिश करें।",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "सिस्टम यूज़र के रूप में मार्क किए जाने के लिए यूज़र का बॉट होना ज़रूरी है।",
|
||||
"age_verification.already_verified": "आपने पहले ही एज वेरिफ़िकेशन पूरा कर लिया है।",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id`, और `expires_at` ज़रूरी हैं।",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id`, और `message_id` मान्य इंटीजर होने चाहिए।",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "Testni sustav je onemogućen.",
|
||||
"admin_and_system.test_harness_forbidden": "Testni sustav je zabranjen.",
|
||||
"admin_and_system.update_failed": "Nismo mogli ažurirati resurs. Pokušaj ponovno.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Korisnik mora biti bot da bi bio označen kao sistemski korisnik.",
|
||||
"age_verification.already_verified": "Provjera dobi je već završena.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` i `expires_at` su obavezni.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` i `message_id` moraju biti valjani cijeli brojevi.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "A tesztkeretrendszer ki van kapcsolva.",
|
||||
"admin_and_system.test_harness_forbidden": "A tesztkeretrendszer használata nem engedélyezett.",
|
||||
"admin_and_system.update_failed": "Nem sikerült frissíteni az erőforrást. Próbáld újra.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Csak botfelhasználó jelölhető meg rendszerfelhasználóként.",
|
||||
"age_verification.already_verified": "Már elvégezted a korhatár-ellenőrzést.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` és `expires_at` megadása kötelező.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` és `message_id` érvényes egész számoknak kell lenniük.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "Test harness dinonaktifkan.",
|
||||
"admin_and_system.test_harness_forbidden": "Test harness dilarang.",
|
||||
"admin_and_system.update_failed": "Tidak bisa memperbarui sumber daya. Coba lagi.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Pengguna harus bot untuk ditandai sebagai pengguna sistem.",
|
||||
"age_verification.already_verified": "Kamu sudah menyelesaikan verifikasi usia.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id`, dan `expires_at` diperlukan.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id`, dan `message_id` harus berupa bilangan bulat yang valid.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "Ambiente di test disabilitato.",
|
||||
"admin_and_system.test_harness_forbidden": "Ambiente di test vietato.",
|
||||
"admin_and_system.update_failed": "Non è stato possibile aggiornare la risorsa. Riprova.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "L'utente deve essere un bot per essere contrassegnato come utente di sistema.",
|
||||
"age_verification.already_verified": "Hai già completato la verifica dell'età.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` e `expires_at` sono richiesti.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` e `message_id` devono essere interi validi.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "テストハーネスは無効です。",
|
||||
"admin_and_system.test_harness_forbidden": "テストハーネスは禁止されています。",
|
||||
"admin_and_system.update_failed": "リソースを更新できませんでした。もう一度お試しください。",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "システムユーザーとしてマークするには、ユーザーはボットである必要があります。",
|
||||
"age_verification.already_verified": "年齢確認はすでに完了しています。",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`、`channel_id`、`message_id`、`expires_at`は必須です。",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`、`channel_id`、`message_id`は有効な整数である必要があります。",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "테스트 하네스가 비활성화되었어요.",
|
||||
"admin_and_system.test_harness_forbidden": "테스트 하네스 사용이 금지되어 있어요.",
|
||||
"admin_and_system.update_failed": "리소스를 업데이트하지 못했어요. 다시 시도해 주세요.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "시스템 사용자로 표시하려면 봇이어야 해요.",
|
||||
"age_verification.already_verified": "연령 인증을 이미 완료했어요.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id`, `expires_at`이 모두 필요해요.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id`, `message_id`는 모두 유효한 정수여야 해요.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "Testavimo sistema išjungta.",
|
||||
"admin_and_system.test_harness_forbidden": "Testavimo sistema draudžiama.",
|
||||
"admin_and_system.update_failed": "Ištekliaus atnaujinti nepavyko. Pabandyk dar kartą.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Naudotojas turi būti botas, kad jį būtų galima pažymėti kaip sistemos naudotoją.",
|
||||
"age_verification.already_verified": "Amžiaus patvirtinimą jau atlikai.",
|
||||
"attachments_and_uploads.attachment_fields_required": "Reikalingi: `attachment_id`, `channel_id`, `message_id` ir `expires_at`.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` ir `message_id` turi būti galiojantys sveikieji skaičiai.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "Testfunctionaliteit is uitgeschakeld.",
|
||||
"admin_and_system.test_harness_forbidden": "Testfunctionaliteit is verboden.",
|
||||
"admin_and_system.update_failed": "We konden het item niet bijwerken. Probeer het opnieuw.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Gebruiker moet een bot zijn om als systeemgebruiker te worden gemarkeerd.",
|
||||
"age_verification.already_verified": "Je hebt de leeftijdsverificatie al voltooid.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` en `expires_at` zijn verplicht.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` en `message_id` moeten geldige gehele getallen zijn.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "Testrammeverket er deaktivert.",
|
||||
"admin_and_system.test_harness_forbidden": "Testrammeverket er ikke tillatt.",
|
||||
"admin_and_system.update_failed": "Vi kunne ikke oppdatere ressursen. Prøv på nytt.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Brukeren må være en bot for å bli merket som en systembruker.",
|
||||
"age_verification.already_verified": "Du har allerede fullført aldersverifisering.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` og `expires_at` er påkrevd.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` og `message_id` må være gyldige heltall.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "Środowisko testowe wyłączone.",
|
||||
"admin_and_system.test_harness_forbidden": "Środowisko testowe zabronione.",
|
||||
"admin_and_system.update_failed": "Nie udało się zaktualizować zasobu. Spróbuj jeszcze raz.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Użytkownik musi być botem, aby mógł być oznaczony jako użytkownik systemowy.",
|
||||
"age_verification.already_verified": "Weryfikacja wieku została już zakończona.",
|
||||
"attachments_and_uploads.attachment_fields_required": "Wymagane: `attachment_id`, `channel_id`, `message_id` i `expires_at`.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` i `message_id` muszą być prawidłowymi liczbami całkowitymi.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "A ferramenta de teste está desativada.",
|
||||
"admin_and_system.test_harness_forbidden": "A ferramenta de teste é proibida.",
|
||||
"admin_and_system.update_failed": "Não foi possível atualizar o recurso. Tente de novo.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "O usuário deve ser um bot para ser marcado como usuário de sistema.",
|
||||
"age_verification.already_verified": "Você já concluiu a verificação de idade.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` e `expires_at` são obrigatórios.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` e `message_id` devem ser números inteiros válidos.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "Cadrul de testare este dezactivat.",
|
||||
"admin_and_system.test_harness_forbidden": "Cadrul de testare este interzis.",
|
||||
"admin_and_system.update_failed": "Resursa nu a putut fi actualizată. Încearcă din nou.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Utilizatorul trebuie să fie un bot pentru a fi marcat ca utilizator de sistem.",
|
||||
"age_verification.already_verified": "Ai finalizat deja verificarea vârstei.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` și `expires_at` sunt obligatorii.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` și `message_id` trebuie să fie numere întregi valide.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "Тестовый стенд отключён.",
|
||||
"admin_and_system.test_harness_forbidden": "Тестовый стенд запрещён.",
|
||||
"admin_and_system.update_failed": "Не удалось обновить ресурс. Попробуй ещё раз.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Пользователь должен быть ботом, чтобы отметить его как системного пользователя.",
|
||||
"age_verification.already_verified": "Возраст уже подтверждён.",
|
||||
"attachments_and_uploads.attachment_fields_required": "Необходимо указать `attachment_id`, `channel_id`, `message_id` и `expires_at`.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` и `message_id` должны быть действительными целыми числами.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "Testverktyget är inaktiverat.",
|
||||
"admin_and_system.test_harness_forbidden": "Testverktyget är inte tillåtet.",
|
||||
"admin_and_system.update_failed": "Det gick inte att uppdatera resursen. Försök igen.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Användaren måste vara en bot för att markeras som en systemanvändare.",
|
||||
"age_verification.already_verified": "Du har redan slutfört åldersverifieringen.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` och `expires_at` krävs.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` och `message_id` måste vara giltiga heltal.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "ปิดใช้งาน test harness แล้ว",
|
||||
"admin_and_system.test_harness_forbidden": "ไม่อนุญาตให้ใช้ test harness",
|
||||
"admin_and_system.update_failed": "ไม่สามารถอัปเดตทรัพยากรได้ โปรดลองอีกครั้ง",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "ผู้ใช้ต้องเป็นบอทจึงจะสามารถระบุว่าเป็นผู้ใช้ระบบได้",
|
||||
"age_verification.already_verified": "คุณยืนยันอายุเรียบร้อยแล้ว",
|
||||
"attachments_and_uploads.attachment_fields_required": "ต้องระบุ `attachment_id`, `channel_id`, `message_id` และ `expires_at`",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` และ `message_id` ต้องเป็นจำนวนเต็มที่ถูกต้อง",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "Test altyapısı devre dışı.",
|
||||
"admin_and_system.test_harness_forbidden": "Test altyapısı yasak.",
|
||||
"admin_and_system.update_failed": "Kaynağı güncelleyemedik. Tekrar dene.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Kullanıcı, sistem kullanıcısı olarak işaretlenmek için bot olmalı.",
|
||||
"age_verification.already_verified": "Yaş doğrulamasını zaten tamamladın.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` ve `expires_at` gerekli.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` ve `message_id` geçerli tam sayı olmalı.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "Тестову систему вимкнено.",
|
||||
"admin_and_system.test_harness_forbidden": "Тестову систему заборонено.",
|
||||
"admin_and_system.update_failed": "Не вдалося оновити ресурс. Спробуй ще раз.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Користувач має бути ботом, щоб його можна було позначити як системного користувача.",
|
||||
"age_verification.already_verified": "Перевірку віку вже пройдено.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` та `expires_at` є обов'язковими.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` та `message_id` мають бути дійсними цілими числами.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "Tính năng test harness đã bị tắt.",
|
||||
"admin_and_system.test_harness_forbidden": "Tính năng test harness bị cấm.",
|
||||
"admin_and_system.update_failed": "Không thể cập nhật tài nguyên. Vui lòng thử lại.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "Người dùng phải là bot mới được đánh dấu là người dùng hệ thống.",
|
||||
"age_verification.already_verified": "Bạn đã hoàn tất xác minh tuổi.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id` và `expires_at` là bắt buộc.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id` và `message_id` phải là các số nguyên hợp lệ.",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "测试工具已禁用。",
|
||||
"admin_and_system.test_harness_forbidden": "禁止使用测试工具。",
|
||||
"admin_and_system.update_failed": "无法更新资源。请重试。",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "用户必须是机器人才能被标记为系统用户。",
|
||||
"age_verification.already_verified": "你已完成年龄验证。",
|
||||
"attachments_and_uploads.attachment_fields_required": "需要提供 `attachment_id`、`channel_id`、`message_id` 和 `expires_at`。",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`、`channel_id` 和 `message_id` 必须是有效的整数。",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "測試工具已停用。",
|
||||
"admin_and_system.test_harness_forbidden": "禁止使用測試工具。",
|
||||
"admin_and_system.update_failed": "我們無法更新資源。請再試一次。",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "使用者必須是機器人才能標記為系統使用者。",
|
||||
"age_verification.already_verified": "你已完成年齡驗證。",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`、`channel_id`、`message_id` 和 `expires_at` 為必填。",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`、`channel_id` 和 `message_id` 必須為有效的整數。",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"admin_and_system.test_harness_disabled": "Test harness is disabled.",
|
||||
"admin_and_system.test_harness_forbidden": "Test harness is forbidden.",
|
||||
"admin_and_system.update_failed": "We couldn't update the resource. Please try again.",
|
||||
"admin_and_system.user_must_be_bot_for_system_user": "User must be a bot to be marked as a system user.",
|
||||
"age_verification.already_verified": "You've already completed age verification.",
|
||||
"attachments_and_uploads.attachment_fields_required": "`attachment_id`, `channel_id`, `message_id`, and `expires_at` are required.",
|
||||
"attachments_and_uploads.attachment_ids_must_be_valid_integers": "`attachment_id`, `channel_id`, and `message_id` must be valid integers.",
|
||||
|
||||
@@ -247,6 +247,20 @@ export const ClearUserFieldsRequest = z.object({
|
||||
|
||||
export type ClearUserFieldsRequest = z.infer<typeof ClearUserFieldsRequest>;
|
||||
|
||||
export const SetUserBotStatusRequest = z.object({
|
||||
user_id: SnowflakeType.describe('ID of the user to update'),
|
||||
bot: z.boolean().describe('Whether the user should be marked as a bot'),
|
||||
});
|
||||
|
||||
export type SetUserBotStatusRequest = z.infer<typeof SetUserBotStatusRequest>;
|
||||
|
||||
export const SetUserSystemStatusRequest = z.object({
|
||||
user_id: SnowflakeType.describe('ID of the user to update'),
|
||||
system: z.boolean().describe('Whether the user should be marked as a system user'),
|
||||
});
|
||||
|
||||
export type SetUserSystemStatusRequest = z.infer<typeof SetUserSystemStatusRequest>;
|
||||
|
||||
export const VerifyUserEmailRequest = z.object({
|
||||
user_id: SnowflakeType.describe('ID of the user to verify email for'),
|
||||
});
|
||||
@@ -561,6 +575,14 @@ export const AdminUserClearFieldsRequest = ClearUserFieldsRequest.omit({user_id:
|
||||
|
||||
export type AdminUserClearFieldsRequest = z.infer<typeof AdminUserClearFieldsRequest>;
|
||||
|
||||
export const AdminUserBotStatusRequest = SetUserBotStatusRequest.omit({user_id: true});
|
||||
|
||||
export type AdminUserBotStatusRequest = z.infer<typeof AdminUserBotStatusRequest>;
|
||||
|
||||
export const AdminUserSystemStatusRequest = SetUserSystemStatusRequest.omit({user_id: true});
|
||||
|
||||
export type AdminUserSystemStatusRequest = z.infer<typeof AdminUserSystemStatusRequest>;
|
||||
|
||||
export const AdminUserUsernameUpdateRequest = ChangeUsernameRequest.omit({user_id: true});
|
||||
|
||||
export type AdminUserUsernameUpdateRequest = z.infer<typeof AdminUserUsernameUpdateRequest>;
|
||||
|
||||
Reference in new issue
Block a user