feat: /ia — chat question-and-answer backed by MiniMax
Adds an `ia` module: `/ia <pergunta>` sends the question to an OpenAI-compatible chat-completions endpoint (MiniMax by default) and posts the reply to chat. Access is gated by `canalhandia.ia`, declared `default: op` so the operator has it out of the box and LuckPerms can grant it to anyone else. The model can only ever produce chat text: - the reply goes to sendMessage and nowhere else — it is never passed to the command dispatcher; - no `tools`/`tool_choice` are sent, so there is nothing for the model to call; - the system prompt states it has no server, shell or command access; - replies are sanitised — colour codes stripped so they cannot forge server messages, newlines folded so one answer is one chat entry, and leading slashes removed so nothing reads as a command to run. The API key is deliberately not a config value, since config.yml is committed. It is read from MINIMAX_API_KEY or from plugins/Canalhandia/minimax.key, which is now gitignored. Cost is bounded by a per-player cooldown and a server-wide daily cap, both visible in /canalhandia status. The HTTP call runs off the main thread; only the delivery hops back onto it.
This commit is contained in:
@@ -14,6 +14,7 @@ modulos:
|
||||
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.
|
||||
ia: true # /ia <pergunta> — só para quem tem canalhandia.ia
|
||||
|
||||
# --- Curiosidades ------------------------------------------------------------
|
||||
|
||||
@@ -103,3 +104,55 @@ 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, e
|
||||
# nenhuma ferramenta é oferecida ao modelo na requisição — ele não tem como
|
||||
# rodar nada no servidor, no terminal ou no jogo.
|
||||
ia:
|
||||
url: "https://api.minimax.io/v1/text/chatcompletion_v2"
|
||||
modelo: "MiniMax-M2"
|
||||
|
||||
# Tamanho da resposta pedida ao modelo, e o corte final no chat.
|
||||
max-tokens: 300
|
||||
max-caracteres: 500
|
||||
|
||||
# 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.
|
||||
|
||||
@@ -56,6 +56,10 @@ commands:
|
||||
f:
|
||||
description: Presta luto pela última morte.
|
||||
usage: /f
|
||||
ia:
|
||||
description: Faz uma pergunta simples para a IA.
|
||||
usage: /ia <pergunta>
|
||||
aliases: [pergunta]
|
||||
|
||||
permissions:
|
||||
# Declared explicitly: an undeclared Bukkit permission falls back to op-only,
|
||||
@@ -75,6 +79,9 @@ permissions:
|
||||
canalhandia.admin:
|
||||
description: Permite mudar módulos, modo, intervalo, categorias e reações.
|
||||
default: op
|
||||
canalhandia.ia:
|
||||
description: Permite usar /ia. Padrão op; o LuckPerms pode conceder a outros.
|
||||
default: op
|
||||
canalhandia.isento:
|
||||
description: Quem tem isto nunca é sorteado como assunto.
|
||||
default: false
|
||||
|
||||
Reference in New Issue
Block a user