revert(admin): restore user type toggles (#3306)

This commit is contained in:
Hampus authored and GitHub committed 2026-10-08 20:04:01 +02:00
1 parent 0ec1cee99e
commit c486c2d3d0
87 files changed
+622 -13

No files matched your search

+152 -7
View File
@@ -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"}},
+2
View File
@@ -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,
+22
View File
@@ -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,
+16
View File
@@ -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
+1
View File
@@ -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.',
+1
View File
@@ -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` أعدادًا صحيحة صالحة.",
+1
View File
@@ -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` трябва да са валидни цели числа.",
+1
View File
@@ -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.",
+1
View File
@@ -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.",
+1
View File
@@ -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.",
+1
View File
@@ -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.",
+1
View File
@@ -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`.",
+1
View File
@@ -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.",
+1
View File
@@ -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` חייבים להיות מספרים שלמים תקינים.",
+1
View File
@@ -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` मान्य इंटीजर होने चाहिए।",
+1
View File
@@ -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.",
+1
View File
@@ -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.",
+1
View File
@@ -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.",
+1
View File
@@ -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.",
+1
View File
@@ -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`は有効な整数である必要があります。",
+1
View File
@@ -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`는 모두 유효한 정수여야 해요.",
+1
View File
@@ -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.",
+1
View File
@@ -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.",
+1
View File
@@ -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.",
+1
View File
@@ -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.",
+1
View File
@@ -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.",
+1
View File
@@ -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.",
+1
View File
@@ -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` ต้องเป็นจำนวนเต็มที่ถูกต้อง",
+1
View File
@@ -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ı.",
+1
View File
@@ -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` мають бути дійсними цілими числами.",
+1
View File
@@ -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>;