qqbot-channel

Habilidade de gerenciamento de canais QQ. Use `qqbot_channel_api` para requisições explícitas de gerenciamento de canais QQ; confirme operações de escrita, exclusão e em massa antes de chamar endpoints autenticados da plataforma aberta QQ.

O que é qqbot-channel?

Esta habilidade fornece uma interface de proxy HTTP para a API da plataforma aberta QQ, automatizando o preenchimento do token de autenticação. Ela permite que o agente realize operações de gerenciamento em canais QQ, subcanais, anúncios, postagens de fórum e agendas, abrangendo métodos como GET, POST, PUT, PATCH e DELETE. Suporta as plataformas Claude Code, Cursor e Codex, e inclui proteções de segurança importantes: todas as operações de exclusão (DELETE) exigem confirmação explícita do usuário através do parâmetro `confirmed: true`, e exclusões em massa exigem `bulkConfirmed: true`. A habilidade também orienta o agente a listar recursos antes de excluí-los e a exibir imagens de avatar/ícone apenas quando solicitado pelo usuário, garantindo um comportamento responsável e não intrusivo.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/clawdbot/clawdbot/tree/main/extensions/qqbot/skills/qqbot-channel

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Prévia

Do README da skill

Avatar
descrição

Documentação

Guia de Requisições da API QQ Channel

qqbot_channel_api é uma ferramenta proxy HTTP para a plataforma aberta QQ que preenche automaticamente o token de autenticação. Você só precisa especificar o método HTTP, o caminho da API, o corpo da requisição e os parâmetros de consulta.

📚 Documentação de Referência Detalhada

Descrição completa dos parâmetros, estruturas de retorno e definições de enumeração para cada endpoint:

  • references/api_references.md

🔧 Parâmetros da Ferramenta

ParâmetroTipoObrigatórioDescrição
methodstringSimMétodo HTTP: GET, POST, PUT, PATCH, DELETE
pathstringSimCaminho da API (sem domínio), ex: /guilds/{guild_id}/channels. Substitua placeholders por valores reais
bodyobjectNãoJSON do corpo da requisição (usado em POST/PUT/PATCH)
queryobjectNãoPares chave-valor para parâmetros de consulta URL. Valores devem ser do tipo string
confirmedbooleanNãoDELETE deve ser true, indicando que o usuário confirmou a exclusão exata do alvo
bulkConfirmedbooleanNãoDeletar em lote (ex: deletar todos os anúncios) requer true adicionalmente

URL base: https://api.sgroup.qq.com. O cabeçalho de autenticação Authorization: QQBot {token} é preenchido automaticamente pela ferramenta.

🛡️ Limites de Segurança

  • Chame endpoints de escrita apenas quando o usuário explicitamente solicitar gerenciamento de canais QQ, subcanais, anúncios, postagens de fórum ou agendas.
  • POST, PUT, PATCH e DELETE modificam recursos reais do QQ. Antes de chamar, repita o canal/subcanal/postagem/agenda alvo e a alteração esperada; operações irreversíveis ou de grande escala (exclusão, exclusão em lote, substituição de anúncios) devem aguardar confirmação do usuário.
  • Antes de excluir, use GET/endpoints de listagem para buscar candidatos e permitir que o usuário selecione IDs específicos. Não adivinhe alvos de exclusão com base em nomes vagos.
  • Requisições DELETE devem ter confirmed: true, caso contrário a ferramenta rejeitará a execução. Operações em lote como announces/all também exigem bulkConfirmed: true, usada somente se o usuário disser explicitamente para deletar todos os anúncios e confirmar novamente.
  • Dados de membros, URLs de avatar, ícones de canais, etc., são dados de usuário/grupo. Por padrão, resuma apenas campos necessários; exiba imagens inline somente se o usuário solicitar ver o avatar/ícone ou para comparação visual. Não repasse URLs de avatar sem contexto.

⭐ Referência Rápida de Endpoints

Guild (Canal)

OperaçãoMétodoCaminhoDescrição dos Parâmetros
Obter lista de guilds (canais)GET/users/@me/guildsquery: before, after, limit (máx. 100)
Obter permissão de API do guildGET/guilds/{guild_id}/api_permission—

Channel (Subcanal)

OperaçãoMétodoCaminhoDescrição dos Parâmetros
Obter lista de subcanaisGET/guilds/{guild_id}/channels—
Obter detalhes do subcanalGET/channels/{channel_id}—
Criar subcanalPOST/guilds/{guild_id}/channelsbody: name, type, position*, sub_type, parent_id, private_type, private_user_ids, speak_permission, application_id
Modificar subcanalPATCH/channels/{channel_id}body: name, position, parent_id, private_type, speak_permission (pelo menos um)
Deletar subcanal—Veja fluxo de exclusão com confirmaçãoOperação destrutiva; não chamar sem confirmação

Tipos de subcanal (type): 0=Texto, 2=Voz, 4=Agrupamento (position≥2), 10005=Transmissão ao vivo, 10006=Aplicativo, 10007=Fórum

Member (Membro)

OperaçãoMétodoCaminhoDescrição dos Parâmetros
Obter lista de membrosGET/guilds/{guild_id}/membersquery: after (primeira página: 0), limit (1-400)
Obter detalhes do membroGET/guilds/{guild_id}/members/{user_id}—
Obter membros de um cargoGET/guilds/{guild_id}/roles/{role_id}/membersquery: start_index (primeira página: 0), limit (1-400)
Obter número de membros onlineGET/channels/{channel_id}/online_nums—

Announce (Anúncio)

OperaçãoMétodoCaminhoDescrição dos Parâmetros
Criar anúncioPOST/guilds/{guild_id}/announcesbody: message_id, channel_id, announces_type (0=membros, 1=boas-vindas), recommend_channels (máx. 3)
Deletar anúncio—Veja fluxo de exclusão com confirmaçãoOperação destrutiva; exclusão em lote requer confirmação dupla

Forum (Fórum) — Apenas bots de domínio privado

OperaçãoMétodoCaminhoDescrição dos Parâmetros
Obter lista de postagensGET/channels/{channel_id}/threads—
Obter detalhes da postagemGET/channels/{channel_id}/threads/{thread_id}—
Publicar postagemPUT/channels/{channel_id}/threadsbody: title, content, format (1=Texto,2=HTML,3=Markdown,4=JSON, padrão 3)
Deletar postagem—Veja fluxo de exclusão com confirmaçãoOperação destrutiva; não chamar sem confirmação
Publicar comentárioPOST/channels/{channel_id}/threads/{thread_id}/commentbody: thread_author, content, thread_create_time, image

Schedule (Agenda)

OperaçãoMétodoCaminhoDescrição dos Parâmetros
Criar agendaPOST/channels/{channel_id}/schedulesbody: { schedule: { name*, start_timestamp*, end_timestamp*, jump_channel_id, remind_type } }
Modificar agendaPATCH/channels/{channel_id}/schedules/{schedule_id}body: { schedule: { name*, start_timestamp*, end_timestamp*, jump_channel_id, remind_type } }
Deletar agenda—Veja fluxo de exclusão com confirmaçãoOperação destrutiva; não chamar sem confirmação

Tipo de lembrete (remind_type): "0"=Sem lembrete, "1"=No início, "2"=5 minutos antes, "3"=15 minutos antes, "4"=30 minutos antes, "5"=60 minutos antes

* indica parâmetro obrigatório


💡 Exemplos de Chamada

Obter lista de guilds

{
  "method": "GET",
  "path": "/users/@me/guilds",
  "query": { "limit": "100" }
}

Obter lista de subcanais

{
  "method": "GET",
  "path": "/guilds/123456/channels"
}

Criar subcanal

{
  "method": "POST",
  "path": "/guilds/123456/channels",
  "body": {
    "name": "Novo Canal",
    "type": 0,
    "position": 1,
    "sub_type": 0
  }
}

Obter lista de membros (paginação)

{
  "method": "GET",
  "path": "/guilds/123456/members",
  "query": { "after": "0", "limit": "100" }
}

Publicar postagem no fórum

{
  "method": "PUT",
  "path": "/channels/789012/threads",
  "body": {
    "title": "Título do Anúncio",
    "content": "# Título\n\nConteúdo do anúncio",
    "format": 3
  }
}

Criar agenda

{
  "method": "POST",
  "path": "/channels/456789/schedules",
  "body": {
    "schedule": {
      "name": "Reunião Semanal",
      "start_timestamp": "1770733800000",
      "end_timestamp": "1770737400000",
      "remind_type": "2"
    }
  }
}

Criar anúncio de subcanal recomendado

{
  "method": "POST",
  "path": "/guilds/123456/announces",
  "body": {
    "announces_type": 0,
    "recommend_channels": [{ "channel_id": "789012", "introduce": "Bem-vindo ao canal de guias" }]
  }
}

Fluxo de exclusão com confirmação

APIs de exclusão do QQ não são expostas como exemplos rápidos. Se o usuário solicitar exclusão de um recurso, primeiro leia e repita o objeto alvo, depois de confirmado, chame qqbot_channel_api: método "DELETE", confirmed como true, e path com o caminho do recurso confirmado.

Objeto a excluirpath após confirmaçãoRequisito adicional
Subcanal/channels/{channel_id}Confirmar ID e nome do subcanal
Anúncio único/guilds/{guild_id}/announces/{message_id}Confirmar ID do anúncio
Todos anúncios/guilds/{guild_id}/announces/allUsuário confirma novamente; então passar bulkConfirmed: true
Postagem/channels/{channel_id}/threads/{thread_id}Confirmar ID da postagem, título/autor
Agenda/channels/{channel_id}/schedules/{schedule_id}Confirmar ID da agenda, nome/horário

🔄 Fluxos de Operação Comuns

Obter informações de guild e subcanais

1. GET /users/@me/guilds → obter lista de guilds, extrair guild_id
2. GET /guilds/{guild_id}/channels → obter lista de subcanais, extrair channel_id
3. GET /channels/{channel_id} → obter detalhes do subcanal

Publicar postagem + comentário no fórum

1. GET /guilds/{guild_id}/channels → encontrar subcanal de fórum (type=10007)
2. PUT /channels/{channel_id}/threads → publicar postagem
3. GET /channels/{channel_id}/threads → obter lista de postagens
4. GET /channels/{channel_id}/threads/{thread_id} → obter detalhes da postagem (inclui author_id)
5. POST /channels/{channel_id}/threads/{thread_id}/comment → publicar comentário

Gerenciamento de membros

1. GET /users/@me/guilds → obter guild_id
2. GET /guilds/{guild_id}/members?after=0&limit=100 → obter lista de membros
   Paginação: use o último user.id como after até retornar array vazio
3. GET /guilds/{guild_id}/members/{user_id} → obter detalhes do membro específico

Exibir avatar do membro

O campo user.avatar nos detalhes do membro é uma URL de avatar. Por padrão, exiba apenas campos necessários como apelido, ID, data de entrada. Quando o usuário solicitar explicitamente ver o avatar/ícone, ou quando o avatar for essencial para a tarefa atual, exiba inline com sintaxe Markdown de imagem:

Informações do membro:
· Apelido: {nick}
· Avatar:
![Avatar](https://raw.githubusercontent.com/clawdbot/clawdbot/main/{user.avatar})

Não exiba a URL original do avatar sem contexto nem a repasse como link comum. O campo icon de guilds segue o mesmo princípio: exiba apenas quando o usuário solicitar.


🚨 Tratamento de Códigos de Erro

Código de ErroDescriçãoSolução
401Falha na autenticação do tokenVerifique as configurações de AppID e ClientSecret
11241Sem permissão de API do guildSolicite permissão no QQ Open Platform, ou chame GET /guilds/{guild_id}/api_permission para ver permissões disponíveis
11242Disponível apenas para bots de domínio privadoAltere o bot para modo de domínio privado no QQ Open Platform
11243Requer permissão de gerenciamento de canalCertifique-se de que o bot possui permissão de gerenciamento
11281Limite de frequência de agendasLimite de 10/dia por administrador, 100/dia por canal
304023Excedido limite de subcanais recomendadosMáximo de 3 subcanais recomendados

⚠️ Notas Importantes

  1. Placeholders no caminho (ex: {guild_id}, {channel_id}) devem ser substituídos por valores reais.
  2. Valores de parâmetros query devem ser do tipo string, ex: { "limit": "100" } e não { "limit": 100 }.
  3. Paginação da lista de membros pode retornar membros duplicados; deduplicar por user.id.
  4. Anúncios dos dois tipos (anúncio de mensagem e anúncio de subcanal recomendado) se sobrescrevem mutuamente.
  5. Timestamps de agendas são strings em milissegundos.
  6. Operações de exclusão são irreversíveis; confirme o alvo exato e passe confirmed: true; exclusão em lote requer confirmação dupla e bulkConfirmed: true.
  7. Operações de fórum disponíveis apenas para bots de domínio privado.
  8. Agrupamentos de subcanal (type=4) devem ter position >= 2.
  9. Operações de agenda têm limite de frequência: 10/dia por administrador, 100/dia por canal.
  10. Exibição de avatares/ícones: URLs de imagem como user.avatar de membros e icon de guilds são dados de perfil; por padrão, resuma campos necessários, e exiba com sintaxe Markdown de imagem ![descrição](https://raw.githubusercontent.com/clawdbot/clawdbot/main/URL) apenas quando o usuário solicitar explicitamente.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

1password

Set up and use 1Password CLI for sign-in, desktop integration, and reading or injecting secrets.

acp-router

Route plain-language requests for Claude Code, Cursor, Copilot, OpenClaw ACP, OpenCode, Gemini CLI, Grok Build, Qwen, Kiro, Kimi, iFlow, Factory Droid, Kilocode, or explicit ACP harness work into either OpenClaw ACP runtime sessions or direct acpx-driven sessions ("telephone game" flow). For coding-agent thread requests, read this skill first, then use only `sessions_spawn` for thread creation. Codex chat binding defaults to the native Codex app-server plugin unless ACP is explicit or background spawn needs ACP.

add-model-provider

Add and live-prove a model provider with non-interactive config one-liners, without exposing credentials.

agent-transcript

Requested GitHub PR/issue agent transcripts: redact, trim, preview, and insert safely.

apple-notes

Create, view, edit, delete, search, move, or export Apple Notes via the memo CLI on macOS.

apple-reminders

List, add, edit, complete, or delete Apple Reminders and reminder lists via remindctl.

auto-qa

Run OpenClaw-wide autonomous QA and live/stress campaigns across independent subsystem lanes, with verified fixes and a resumable evidence report.

autoreview

Structured code review through the shared OpenClaw agent-skills installation.

bear-notes

Create, search, and manage Bear notes via grizzly CLI.

blacksmith-testbox

Run Blacksmith Testbox for CI-parity checks, secrets, hosted services, migrations, or builds local cannot reproduce.

block-kit

Use proactively for structured or interactive Slack replies, and when asked to author or validate native Slack Block Kit JSON.

blogwatcher

Monitor blogs and RSS/Atom feeds for updates using the blogwatcher CLI.

blucli

BluOS CLI (blu) for discovery, playback, grouping, and volume.

bluebubbles

Send and manage iMessages via BlueBubbles, including attachments, tapbacks, edits, replies, and groups.

browser-automation

Use when controlling web pages with the OpenClaw browser tool, especially multi-step flows, login checks, tab management, or recovery from stale refs/timeouts.

camsnap

Capture frames or clips from RTSP/ONVIF cameras and local webcams, including USB pan/tilt/zoom control.

canvas

Present HTML on connected OpenClaw node canvases, navigate/eval/snapshot, and debug canvas host URLs.

channel-message-flows

Use when running QA Lab channel message flow evidence.

clawdtributor

Clawtributor PRs here, last week or another window: discover conversation refs, recheck GitHub, rank by impact.

clawhub

Search ClawHub for plugins by default, or skills when explicitly requested; install, verify, update, uninstall, publish, or sync skills.

Habilidades Relacionadas