Ir al contenido

Datos guardados

Un comando puede recordar cosas: un contador, un puntaje, un ranking, un enfriamiento, una lista. Lo que guarda se queda hasta que se elimine (o hasta que caduque), y todos los comandos del servidor pueden leerlo.

{{ $uses := dbIncr "uses" 1 }}
Este comando se ha usado {{ $uses }} veces.

Cada servidor tiene su propio espacio. Ningún servidor puede leer lo que guardó otro. Dentro de un servidor, los datos son:

  • Del servidor: un valor para todo el servidor, por ejemplo "uses".
  • De un miembro: un valor para cada persona, por ejemplo los puntos de cada miembro. Da el ID del usuario como último argumento.

Las claves son texto de 1 a 100 letras, números, ., _, : o -. Un ID de usuario es texto, entre comillas.

Función Qué hace
dbSet clave valor Guarda un valor. dbSet clave valor "idUsuario" lo guarda para un miembro
dbSetExpire clave valor segundos Lo mismo, y desaparece pasado ese tiempo (de 1 segundo a un año). También recibe "idUsuario" al final
dbGet clave El valor, o nil si no hay. dbGet clave "idUsuario" para un miembro
dbDel clave Lo elimina. dbDel clave "idUsuario" para un miembro
dbIncr clave cantidad Suma a un número y devuelve el número nuevo. Empieza desde 0 si todavía no hay nada. Usa una cantidad negativa para restar. Dos personas que lo usen al mismo tiempo nunca pierden una cuenta. dbIncr clave cantidad "idUsuario" para un miembro
dbTop clave cantidad Los miembros con el número más alto bajo esa clave, de mayor a menor, hasta 25. Cada uno es un mapa con UserID y Value
dbKeys prefijo Las claves del servidor que empiezan con el prefijo, hasta 100. dbKeys prefijo "idUsuario" para un miembro. Sin prefijo da todas

dbIncr devuelve el número nuevo, así que lo imprime. Cuando no quieras que se imprima, guárdalo en una variable: {{ $ignored := dbIncr "uses" 1 }}.

Texto, números, true y false, listas y mapas, con listas y mapas dentro de ellos (hasta 6 niveles). Un embed o un mensaje hecho con cembed o complexMessage no se puede guardar. Una vez guardado, un valor vuelve como estaba.

{{ dbSet "profile" (sdict "color" "pink" "tags" (cslice "a" "b")) .User.ID }}
{{ (dbGet "profile" .User.ID).color }}
Límite Valor
Valores por servidor 500
Tamaño de un valor 4000 caracteres una vez guardado
Lecturas y escrituras por uso de un comando 25
Longitud de una clave 100 caracteres
dbTop hasta 25 miembros

Cuando un servidor está lleno, un valor que ya existe todavía puede cambiar, pero una clave nueva se rechaza hasta que se elimine algo. Los valores caducados dejan de contar al instante, y se borran de la base de datos cada hora.

!customcommand codetest conserva lo que el código guarda solo hasta el final de esa prueba. Probar nunca cambia los datos que tu servidor tiene guardados.

{{ $total := dbIncr "hugs" 1 }}
{{ .User.Mention }} dio un abrazo. Abrazos dados en este servidor: **{{ $total }}**.
{{ $action := "top" }}{{ if .Args }}{{ $action = index .Args 0 }}{{ end }}
{{ if eq $action "add" }}
{{ $points := dbIncr "points" 10 .User.ID }}
Tienes **{{ $points }}** puntos.
{{ else }}
{{ range $i, $entry := dbTop "points" 5 }}{{ add $i 1 }}. {{ mentionUser $entry.UserID }}: {{ $entry.Value }}
{{ end }}
{{ end }}
{{ if dbGet "daily" .User.ID }}Ya lo reclamaste hoy. Vuelve más tarde.{{ return }}{{ end }}
{{ dbSetExpire "daily" true 86400 .User.ID }}
{{ $coins := dbIncr "coins" 100 .User.ID }}
Reclamaste 100 monedas. Tienes {{ $coins }}.
{{ $list := or (dbGet "todo") (cslice) }}
{{ dbSet "todo" (append $list .RawArgs) }}
Añadido. La lista tiene {{ add (len $list) 1 }} elementos.