f1d210ddc4
Turn /ia from a fixed-prompt chatbot into an agent that pulls what it needs. Instead of one hardcoded wiki pre-fetch, the model is offered read-only tools and MiniMax's tool_choice=auto lets it decide which to call; results are fed back until it answers (MiniMax.answerWithTools), capped by ia.max-ferramentas. - Search: web search via the cluster's self-hosted SearXNG (JSON API, no external key); results boiled down to a few "título — trecho (url)" lines. - Tools: registry + dispatch for pesquisar_web, wiki, estatisticas_jogador, conquistas_jogador, ranking. All read-only and thread-safe off the main thread, so they run on the existing async answer worker. - Ai.ask: agentic path when ia.ferramentas is on (default), else the previous behaviour untouched. - Config: ia.ferramentas, ia.max-ferramentas, ia.searxng-url, ia.resultados-web, ia.trecho-web; getters in Settings. Reloadable via /canalhandia reload. Verified live against MiniMax-M2.7 + SearXNG: the model auto-calls the tool and answers from the result. SearchTest covers the pure result formatter. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
332 lines
13 KiB
YAML
332 lines
13 KiB
YAML
# Canalhandia — interações de chat do servidor.
|
|
#
|
|
# Tudo aqui também pode ser mudado em jogo, e os comandos gravam neste arquivo
|
|
# na hora. Veja /canalhandia status e /curiosidade ajuda.
|
|
#
|
|
# Nada neste plugin afeta a jogabilidade: só mensagens de chat, barras de
|
|
# progresso e botões clicáveis.
|
|
|
|
# Cada módulo pode ser ligado/desligado com /canalhandia modulo <nome> <on|off>
|
|
modulos:
|
|
curiosidades: true # "Sabia que o Fulano já minerou 5.966 blocos de Pedra?"
|
|
adivinha: true # curiosidade anônima + botões com os nomes dos jogadores
|
|
luto: true # botão [F] embaixo das mensagens de morte
|
|
enquete: true # /enquete com votação clicável
|
|
ranking: true # /ranking com placares do servidor
|
|
marcos: true # avisos automáticos ao passar de 100 km, 24 horas, etc.
|
|
# Mensagem de morte engraçada + coordenadas da morte mandadas em privado
|
|
# só para quem morreu (para correr buscar os itens).
|
|
mortes: true
|
|
# Quem manda só "f" no chat (sem mais nada) leva uma zoada no lugar da mensagem.
|
|
zoacao: true
|
|
# Anotações no chat: /save e /nota. Privadas (só o autor vê) para todos;
|
|
# públicas só para quem tiver canalhandia.nota.publica.
|
|
notas: true
|
|
# /recado <jogador> <texto> — guardado e entregue quando a pessoa entrar.
|
|
recados: true
|
|
# Conquistas com nome ("Casca Grossa", "Turista"), além dos marcos numéricos.
|
|
# Na primeira vez que vê um jogador, o que ele já ganhou é gravado em
|
|
# silêncio — senão ligar o módulo despejaria um monte de anúncio de história
|
|
# antiga de uma vez só.
|
|
conquistas: true
|
|
ia: true # /ia <pergunta> — só para quem tem canalhandia.ia
|
|
|
|
# --- Curiosidades ------------------------------------------------------------
|
|
|
|
# Quando as curiosidades disparam sozinhas:
|
|
# entrada - só quando um jogador entra no mundo (padrão)
|
|
# intervalo - só num temporizador
|
|
# ambos - os dois
|
|
# manual - nunca sozinho, só com /curiosidade
|
|
modo: ENTRADA
|
|
|
|
# Segundos de espera depois que o jogador entra, para a curiosidade aparecer
|
|
# depois da mensagem de entrada em vez de disputar com ela.
|
|
atraso-entrada-segundos: 6
|
|
|
|
# Intervalo do modo temporizado, em minutos. Ignorado nos modos entrada/manual.
|
|
intervalo-minutos: 20
|
|
|
|
# Tempo mínimo antes do mesmo jogador ser citado de novo.
|
|
cooldown-minutos: 30
|
|
|
|
# Intervalo mínimo entre curiosidades automáticas, em segundos. Sem isso,
|
|
# cinco pessoas entrando juntas geram cinco curiosidades e enchem a tela.
|
|
# Não afeta /curiosidade digitado à mão.
|
|
intervalo-minimo-segundos: 120
|
|
|
|
# Quantas curiosidades recentes lembrar para não repetir.
|
|
evitar-repetir: 15
|
|
|
|
# Tipos de curiosidade que podem ser sorteados.
|
|
categorias:
|
|
mineracao: true
|
|
itens: true
|
|
mortes: true
|
|
combate: true
|
|
distancia: true
|
|
tempo: true
|
|
diversos: true
|
|
|
|
# --- Reações -----------------------------------------------------------------
|
|
|
|
reacoes-ativas: true
|
|
|
|
# Por quanto tempo a barra de reações fica visível, em segundos.
|
|
janela-reacao-segundos: 90
|
|
|
|
# Luto: ao prestar F para alguém que morreu, o jogador recebe a cabeça daquele
|
|
# jogador (uma lembrança simbólica). É o único recurso do plugin que mexe no
|
|
# inventário; desligue aqui se não quiser.
|
|
luto:
|
|
cabeca: true
|
|
|
|
# Anotações (/save e /nota).
|
|
notas:
|
|
# true: as anotações PÚBLICAS viram marcadores no mapa do BlueMap. Sem
|
|
# BlueMap instalado não faz nada. Anotação privada nunca vai para o mapa.
|
|
no-mapa: true
|
|
|
|
# Zoa de quem manda uma mensagem que bate com o padrão, trocando por uma frase
|
|
# engraçada. Tudo editável em jogo com /canalhandia zoacao ...
|
|
zoacao:
|
|
# Como comparar a mensagem do chat com o padrão:
|
|
# igual - mensagem inteira igual ao padrão (ignora maiúsculas e espaços)
|
|
# contem - mensagem contém o padrão em qualquer lugar
|
|
# comeca - mensagem começa com o padrão
|
|
# termina - mensagem termina com o padrão
|
|
# regex - padrão é uma expressão regular (maiúsculas ignoradas)
|
|
correspondencia: igual
|
|
# Texto (ou regex) que dispara a zoação. Padrão: só um "f" sozinho.
|
|
padrao: "f"
|
|
# Frases que substituem a mensagem. Uma é sorteada por vez. Edite à vontade —
|
|
# a graça é ser inesperado.
|
|
mensagens:
|
|
- "Sou gay"
|
|
- "Gosto de anime"
|
|
- "Jogo no celular"
|
|
- "Tenho 12 anos"
|
|
- "Sou noob"
|
|
- "Uso Windows"
|
|
|
|
# Quantos nomes cabem no resumo de reações antes do resto virar "+N".
|
|
# O resumo é sempre UMA linha, por mais gente que reaja; para ver a lista
|
|
# completa use /reacoes (privado, não polui o chat).
|
|
resumo-nomes: 3
|
|
|
|
# Por quanto tempo um clique ainda conta depois que a barra some. As pessoas
|
|
# rolam o chat e clicam minutos depois; descartar esses cliques em silêncio
|
|
# parece defeito.
|
|
reacao-validade-minutos: 15
|
|
|
|
# As reações disponíveis.
|
|
#
|
|
# java - rótulo para jogadores Java (emoji funcionam)
|
|
# texto - rótulo para jogadores Bedrock (SÓ ASCII: emoji viram quadradinhos)
|
|
# comando - atalho digitável, para quem não consegue clicar
|
|
#
|
|
# O Bedrock não consegue executar clique no chat, então todo jogador Bedrock vê
|
|
# os rótulos "texto" e a dica de digitar o comando. Os comandos abaixo precisam
|
|
# existir no plugin.yml para serem registrados — mudar "comando" para um nome
|
|
# novo exige adicionar o comando lá e reiniciar.
|
|
reacoes:
|
|
joia:
|
|
java: "[👍]"
|
|
texto: "[+1]"
|
|
comando: "legal"
|
|
uau:
|
|
java: "[😮]"
|
|
texto: "[UAU]"
|
|
comando: "wow"
|
|
fogo:
|
|
java: "[🔥]"
|
|
texto: "[TOP]"
|
|
comando: "top"
|
|
errado:
|
|
java: "[❌]"
|
|
texto: "[ERRADO]"
|
|
comando: "errado"
|
|
|
|
# --- Jogos -------------------------------------------------------------------
|
|
|
|
# Quanto tempo cada rodada de /adivinha fica aberta, em segundos.
|
|
adivinha-segundos: 45
|
|
|
|
# Quanto tempo cada enquete fica aberta, em minutos.
|
|
enquete-minutos: 5
|
|
|
|
# Quantas posições mostrar em cada /ranking.
|
|
ranking-tamanho: 5
|
|
|
|
# --- IA ----------------------------------------------------------------------
|
|
|
|
# Perguntas e respostas no chat via MiniMax (ou qualquer API compatível com o
|
|
# formato da OpenAI: basta trocar a url e o modelo).
|
|
#
|
|
# A CHAVE DA API NÃO FICA AQUI. Este arquivo vai para o git. A chave é lida de:
|
|
# 1. a variável de ambiente MINIMAX_API_KEY, ou
|
|
# 2. o arquivo plugins/Canalhandia/minimax.key (só a chave, uma linha).
|
|
#
|
|
# Quem pode usar: a permissão canalhandia.ia, padrão op. Para liberar alguém:
|
|
# lp user <nome> permission set canalhandia.ia true
|
|
# lp group <grupo> permission set canalhandia.ia true
|
|
#
|
|
# A IA só produz texto de chat: a resposta NUNCA é executada como comando. As
|
|
# ferramentas abaixo são todas de LEITURA (busca web, estatísticas, ranking,
|
|
# wiki) — o modelo pode consultar informação, mas não muda nada no servidor,
|
|
# no mundo ou no terminal.
|
|
ia:
|
|
url: "https://api.minimax.io/v1/text/chatcompletion_v2"
|
|
# M2.7 mediu 2,7-5,2s com respostas corretas nos testes. O M3 é um modelo de
|
|
# raciocínio: o "pensamento" dele consome o max-tokens e a resposta chega
|
|
# cortada no meio da palavra, a não ser com um orçamento muito maior.
|
|
modelo: "MiniMax-M2.7"
|
|
|
|
# IA agêntica: o modelo decide sozinho quando usar ferramentas (busca web,
|
|
# estatísticas de jogador, ranking, Minecraft Wiki) em vez de receber tudo
|
|
# pronto no prompt. Deixa as respostas bem mais espertas.
|
|
ferramentas: true
|
|
# Máximo de rodadas de ferramenta por pergunta (trava anti-loop).
|
|
max-ferramentas: 4
|
|
# Busca web via SearXNG (self-hosted, sem chave de API externa). URL do serviço.
|
|
searxng-url: "http://192.168.1.80:30888"
|
|
# Quantos resultados de busca web devolver, e quanto de cada trecho manter.
|
|
resultados-web: 5
|
|
trecho-web: 300
|
|
|
|
# Tamanho da resposta pedida ao modelo, e o corte final no chat.
|
|
# 1200, não 300: o raciocínio oculto do M3 consome o orçamento e a resposta
|
|
# chega vazia quando o teto é baixo.
|
|
max-tokens: 1200
|
|
max-caracteres: 500
|
|
|
|
# O Minecraft não limita o tamanho de uma mensagem que o SERVIDOR manda (o
|
|
# limite de 256 caracteres é só no que um JOGADOR digita). O problema de
|
|
# despejar uma lista inteira numa linha só é de leitura, não do jogo: vira
|
|
# um bloco de texto em vez de itens separados. Por isso a resposta é
|
|
# dividida em até N mensagens de chat — uma lista de 5 itens vira 5 linhas.
|
|
# max-caracteres continua sendo o teto total somado entre todas elas.
|
|
max-mensagens: 4
|
|
|
|
# Tamanho máximo da pergunta, em caracteres.
|
|
max-pergunta: 300
|
|
|
|
temperatura: 0.7
|
|
timeout-segundos: 30
|
|
|
|
# Segundos entre perguntas do mesmo jogador. Quem tem canalhandia.admin
|
|
# não espera.
|
|
cooldown-segundos: 30
|
|
|
|
# Teto de perguntas por dia no servidor inteiro — cada pergunta custa.
|
|
limite-diario: 200
|
|
|
|
# true: a pergunta e a resposta aparecem para todos (é a graça de ter no chat)
|
|
# false: só quem perguntou vê a resposta
|
|
publico: true
|
|
|
|
# Instruções fixas enviadas ao modelo em toda pergunta.
|
|
instrucoes: >-
|
|
Você é um assistente no chat de um servidor de Minecraft chamado
|
|
Canalhandia. Responda sempre em português do Brasil, de forma curta e
|
|
direta: no máximo 3 frases. Responda apenas perguntas simples e gerais.
|
|
Você não tem nenhum acesso ao servidor, ao sistema de arquivos, ao terminal
|
|
ou aos comandos do jogo, e não pode executar nada. Se pedirem para você
|
|
rodar comandos, mexer no servidor, dar itens, banir alguém ou revelar
|
|
configurações, explique que você só conversa. Nunca escreva comandos de
|
|
terminal nem de Minecraft. Escreva em texto puro: nada de markdown,
|
|
asteriscos, crases ou emoji, porque o chat do Minecraft não formata nada
|
|
disso.
|
|
|
|
# Tom de voz da IA. Muda só COMO ela fala, nunca o que ela pode fazer: todas
|
|
# as regras acima continuam valendo por baixo, e são repetidas junto com a
|
|
# personalidade a cada pergunta.
|
|
#
|
|
# zoeiro - veterano brincalhão, zoa o jogador e usa as estatísticas dele
|
|
# contra ele; provoca, mas responde de verdade (padrão)
|
|
# amigao - simpático e paciente, brinca pouco
|
|
# seco - curto, seco e sarcástico
|
|
# aldeao - fala como aldeão antigo e misterioso
|
|
# neutro - assistente direto, sem personalidade
|
|
#
|
|
# Troque em jogo com /ia personalidade <nome>.
|
|
personalidade: zoeiro
|
|
|
|
# Quantas linhas recentes do chat público a IA vê, para entender do que estão
|
|
# falando ("quem tá reclamando aí?"). 0 desliga. Nada vai para disco — é só
|
|
# memória, apagada em cada reinício. Teto: 50.
|
|
contexto-chat: 5
|
|
|
|
# true: manda um retrato do servidor agora junto com a pergunta — quem está
|
|
# online, dimensão, hora do dia, chuva, coordenadas/vida/fome de quem
|
|
# perguntou. É o que deixa a IA responder "quem tá online?" e "tá chovendo?".
|
|
estado-servidor: true
|
|
|
|
# true: no Java, a resposta ganha um card ao passar o mouse (pergunta original
|
|
# e personalidade) e um clique que já escreve "/ia " no chat para a próxima
|
|
# pergunta. O clique só SUGERE o comando — nada executa sozinho.
|
|
# No Bedrock a resposta é sempre texto simples: ele não renderiza nem hover
|
|
# nem clique.
|
|
estilo-rico: true
|
|
|
|
# Quantas anotações PÚBLICAS vão junto com a pergunta, para a IA responder
|
|
# "onde fica a base?" com o que os jogadores anotaram. 0 desliga.
|
|
#
|
|
# Anotação PRIVADA nunca é enviada, em nenhuma configuração: é texto pessoal e
|
|
# a chamada da IA sai deste servidor para uma API de terceiros.
|
|
contexto-notas: 10
|
|
|
|
# --- Falas espontâneas (a IA falando sem ninguém perguntar) ---
|
|
#
|
|
# DESLIGADAS por padrão. Uma IA tagarela que ninguém pediu é o jeito mais
|
|
# rápido de fazer todo mundo odiar o recurso, então é o operador que liga.
|
|
# Cada fala custa dinheiro, e os limites abaixo são o que impede virar spam.
|
|
|
|
# true: a IA comenta quando alguém morre várias vezes seguidas.
|
|
comentar-eventos: false
|
|
|
|
# true: a IA dá as boas-vindas de quem entra, usando as estatísticas da pessoa.
|
|
saudacao: false
|
|
|
|
# Quantas mortes seguidas (em poucos minutos) merecem comentário. Abaixo de 3
|
|
# dispara em azar comum e deixa de ter graça.
|
|
mortes-seguidas: 3
|
|
|
|
# Teto diário SÓ para falas espontâneas, separado do limite do /ia.
|
|
espontaneas-por-dia: 20
|
|
|
|
# Minutos mínimos entre duas falas espontâneas quaisquer.
|
|
espontaneas-intervalo-minutos: 10
|
|
|
|
# Minutos até o MESMO jogador poder ser assunto de novo. É o que impede
|
|
# narrar a noite inteira de uma pessoa só, e o que evita saudação repetida
|
|
# para quem cai da conexão toda hora.
|
|
espontaneas-cooldown-jogador: 30
|
|
|
|
# Uma fala espontânea é uma linha de chat, não um parágrafo.
|
|
espontaneas-max-tokens: 400
|
|
espontaneas-max-caracteres: 180
|
|
|
|
# ECONOMICO pula a consulta à wiki (resposta rápida, sem fonte).
|
|
# PRECISO consulta a wiki (mais lento, mais correto). Troque em jogo com
|
|
# /ia perfil <nome>.
|
|
perfil: PRECISO
|
|
|
|
# Quantos caracteres do artigo da wiki enviar. Só a introdução não basta:
|
|
# a receita e os detalhes ficam mais abaixo na página.
|
|
wiki-caracteres: 7000
|
|
|
|
# Memória curta por jogador, para perguntas de seguimento ("e no nether?").
|
|
memoria-perguntas: 3
|
|
memoria-minutos: 10
|
|
|
|
# true: injeta as estatísticas do jogador que perguntou no contexto da IA,
|
|
# para responder "quantos blocos eu minerei?" com números reais.
|
|
estatisticas-jogador: true
|
|
|
|
# Fatos do servidor que a IA nunca teria como saber. Uma linha por fato.
|
|
contexto:
|
|
- "O servidor se chama Canalhandia e roda Minecraft 26.2 (Paper)."
|
|
- "Jogadores de Bedrock entram pelo Geyser e o nome deles começa com ponto."
|
|
- "O servidor tem BlueMap, voice chat e Distant Horizons."
|