You're Invited:Meet the Socket Team at RSAC and BSidesSF 2026, March 23โ€“26.RSVP โ†’
Socket
Book a DemoSign in
Socket

@ryantest/openclaw-qqbot

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ryantest/openclaw-qqbot

latest
Source
npmnpm
Version
0.0.3
Version published
Maintainers
1
Created
Source
QQ Bot

QQ Bot Channel Plugin for OpenClaw

Connect your AI assistant to QQ โ€” private chat, group chat, and rich media, all in one plugin.

๐Ÿš€ Current Version: v1.6.4

License QQ Bot Platform Node.js TypeScript


็ฎ€ไฝ“ไธญๆ–‡ | English

Scan to join the QQ group chat

QQ QR Code

โœจ Features

FeatureDescription
๐Ÿ”’ Multi-SceneC2C private chat, group @messages
๐Ÿ–ผ๏ธ Rich MediaSend & receive images, voice, video, and files
๐ŸŽ™๏ธ Voice (STT/TTS)Speech-to-text transcription & text-to-speech replies
๐Ÿ”ฅ One-Click Hot UpgradeSend /bot-upgrade in private chat to upgrade โ€” no server login needed
โฐ Scheduled PushProactive message delivery via scheduled tasks
๐Ÿ”— URL SupportDirect URL sending in private chat (no restrictions)
โŒจ๏ธ Typing Indicator"Bot is typing..." status shown in real-time
๐Ÿ“ MarkdownFull Markdown formatting support
๐Ÿ› ๏ธ CommandsNative OpenClaw command integration
๐Ÿ’ฌ Quoted ContextResolve QQ REFIDX_* quoted messages and inject quote body into AI context

๐Ÿ“ธ Feature Showcase

Note: This plugin serves as a message channel only โ€” it relays messages between QQ and OpenClaw. Capabilities like image understanding, voice transcription, drawing, etc. depend on the AI model you configure and the skills installed in OpenClaw, not on this plugin itself.

๐Ÿ’ฌ Quoted Message Context (REFIDX)

QQ quote events carry index keys (e.g. REFIDX_xxx) instead of full original message body. The plugin now resolves these indices from a local persistent store and injects quote context into AI input, so replies better understand โ€œwhich message is being quotedโ€.

  • Inbound and outbound messages with ref_idx are automatically indexed.
  • Store path: ~/.openclaw/qqbot/data/ref-index.jsonl (survives gateway restart).
  • Quote body may include text + media summary (image/voice/video/file).
Quoted Message Context Demo

๐ŸŽ™๏ธ Voice Messages (STT)

With STT configured, the plugin automatically transcribes voice messages to text before passing them to AI. The whole process is transparent to the user โ€” sending voice feels as natural as sending text.

You: (send a voice message) "What's the weather like tomorrow in Shenzhen?"

QQBot: Tomorrow (March 7, Saturday) Shenzhen weather forecast ๐ŸŒค๏ธ ...

Voice STT Demo

๐Ÿ“„ File Understanding

Send any file to the bot โ€” novels, reports, spreadsheets โ€” AI automatically recognizes the content and gives an intelligent reply.

You: (send a TXT file of "War and Peace")

QQBot: Got it! You uploaded the Chinese version of "War and Peace" by Leo Tolstoy. This appears to be the opening of Chapter 1...

File Understanding Demo

๐Ÿ–ผ๏ธ Image Understanding

If your main model supports vision (e.g. Tencent Hunyuan hunyuan-vision), AI can understand images too. This is a general multimodal capability, not plugin-specific.

You: (send an image)

QQBot: Haha, so cute! Is that a QQ penguin in a lobster costume? ๐Ÿฆž๐Ÿง ...

Image Understanding Demo

๐ŸŽจ Image Sending

You: Draw me a cat

QQBot: Here you go! ๐Ÿฑ

AI can send images directly. Supports local paths and URLs. Formats: jpg/png/gif/webp/bmp.

Image Generation Demo

๐Ÿ”Š Voice Sending

You: Tell me a joke in voice

QQBot: (sends a voice message)

AI can send voice messages directly. Formats: mp3/wav/silk/ogg. No ffmpeg required.

TTS Voice Demo

โฐ Scheduled Reminder (Proactive Message)

You: Remind me to eat in 5 minutes

QQBot: confirms the reminder first, then proactively sends a voice + text reminder when time is up

This capability depends on OpenClaw cron scheduling and proactive messaging. If no reminder arrives, a common reason is QQ-side interception of bot proactive messages.

Scheduled Reminder Demo

๐Ÿ“Ž File Sending

You: Extract chapter 1 of War and Peace and send it as a file

QQBot: (sends a .txt file)

AI can send files directly. Any format, up to 20MB.

File Sending Demo

๐ŸŽฌ Video Sending

You: Send me a demo video

QQBot: (sends a video)

AI can send videos directly. Supports local files and URLs.

Video Sending Demo

Under the hood: Upload dedup caching, ordered queue delivery, and multi-layer audio format fallback.

๐Ÿ› ๏ธ Slash Commands

The plugin provides built-in slash commands that are intercepted before reaching the AI queue, giving instant responses for diagnostics and management.

/bot-ping โ€” Latency Test

You: /bot-ping

QQBot: โœ… pong๏ผโฑ Latency: 602ms (network: 602ms, plugin: 0ms)

Measures end-to-end latency from QQ server push to plugin response, broken down into network transport and plugin processing time.

Ping Demo

/bot-version โ€” Version Info

You: /bot-version

QQBot: ๐Ÿฆž Framework: OpenClaw 2026.3.13 (61d171a) / ๐Ÿค– Plugin: v1.6.3 / ๐ŸŒŸ GitHub repo

Shows framework version, plugin version, and a direct link to the official repository.

Version Demo

/bot-help โ€” Command List

You: /bot-help

QQBot: Lists all available slash commands with clickable shortcuts.

Help Demo

/bot-upgrade โ€” One-Click Hot Upgrade

You: /bot-upgrade

QQBot: ๐Ÿ“Œ Current: v1.6.3 / โœ… New version v1.6.4 available / Click button below to confirm

Send in private chat to upgrade the plugin without server login. Supported usage:

CommandDescription
/bot-upgradeCheck for updates, show confirmation button
/bot-upgrade --latestConfirm upgrade to the latest version
/bot-upgrade --version 1.6.4Upgrade to a specific version
/bot-upgrade --forceForce reinstall current version

Credentials are automatically backed up before upgrade. Version existence is verified against npm before proceeding. Auto-recovery on failure.

<<<<<<< Updated upstream

=======

Platform Support: Hot upgrade is currently supported on Linux and macOS. On Windows, /bot-upgrade will return a manual upgrade guide instead.

Hot Upgrade Demo >>>>>>> Stashed changes

/bot-logs โ€” Log Export

You: /bot-logs

QQBot: ๐Ÿ“‹ Logs packaged (~2000 lines), sending file... (sends a .txt file)

Exports the last ~2000 lines of gateway logs as a file for quick troubleshooting.

Logs Demo

Usage Help

All commands support a ? suffix to show usage:

You: /bot-upgrade ?

QQBot: ๐Ÿ“– /bot-upgrade usage: โ€ฆ

๐Ÿš€ Getting Started

Step 1 โ€” Create a QQ Bot on the QQ Open Platform

  • Go to the QQ Open Platform and scan the QR code with your phone QQ to register / log in. If you haven't registered before, scanning will automatically complete the registration and bind your QQ account.
Clipboard_Screenshot_1772980354
  • After scanning, tap Agree on your phone โ€” you'll land on the bot configuration page.
  • Click Create Bot to create a new QQ bot.
Create Bot

โš ๏ธ The bot will automatically appear in your QQ message list and send a first message. However, it will reply "The bot has gone to Mars" until you complete the configuration steps below.

Bot Say Hello
  • Find AppID and AppSecret on the bot's page, click Copy for each, and save them somewhere safe (e.g., a notepad). AppSecret is not stored in plaintext โ€” if you leave the page without saving it, you'll have to regenerate a new one.
Find AppID and AppSecret

For a step-by-step walkthrough with screenshots, see the official guide.

Step 2 โ€” Install / Upgrade the Plugin

Option A: Remote One-Liner (Easiest, no clone required)

curl -fsSL https://raw.githubusercontent.com/tencent-connect/openclaw-qqbot/main/scripts/upgrade-via-npm.sh \
  | bash -s -- --appid YOUR_APPID --secret YOUR_SECRET

One command does it all: download script โ†’ cleanup old plugins โ†’ install โ†’ configure channel โ†’ restart service. Once done, open QQ and start chatting!

--appid and --secret are required for first-time install. For subsequent upgrades:

curl -fsSL https://raw.githubusercontent.com/tencent-connect/openclaw-qqbot/main/scripts/upgrade-via-npm.sh | bash

Option B: Local Script (if you've cloned the repo)

# Via npm
bash ./scripts/upgrade-via-npm.sh --appid YOUR_APPID --secret YOUR_SECRET

# Or via source
bash ./scripts/upgrade-via-source.sh --appid YOUR_APPID --secret YOUR_SECRET

Common flags:

FlagDescription
--appid <id> --secret <secret>Configure channel (required for first install, or to change credentials)
--version <version>Install a specific version (npm script only)
--self-versionInstall the version from local package.json (npm script only)
-h / --helpShow full usage

Environment variables QQBOT_APPID / QQBOT_SECRET are also supported.

Option C: Manual Install / Upgrade

# Uninstall old plugins (skip if first install)
openclaw plugins uninstall qqbot
openclaw plugins uninstall openclaw-qqbot

# Install latest
openclaw plugins install @tencent-connect/openclaw-qqbot@latest

# Configure channel (first install only)
openclaw channels add --channel qqbot --token "AppID:AppSecret"

# Start / restart
openclaw gateway restart

Step 3 โ€” Test

Open QQ, find your bot, and send a message!

Chat Demo

โš™๏ธ Advanced Configuration

Multi-Account Setup (Multi-Bot)

Run multiple QQ bots under a single OpenClaw instance.

Configuration

Edit ~/.openclaw/openclaw.json and add an accounts field under channels.qqbot:

{
  "channels": {
    "qqbot": {
      "enabled": true,
      "appId": "111111111",
      "clientSecret": "secret-of-bot-1",

      "accounts": {
        "bot2": {
          "enabled": true,
          "appId": "222222222",
          "clientSecret": "secret-of-bot-2"
        },
        "bot3": {
          "enabled": true,
          "appId": "333333333",
          "clientSecret": "secret-of-bot-3"
        }
      }
    }
  }
}

Notes:

  • The top-level appId / clientSecret is the default account (accountId = "default")
  • Each key under accounts (e.g. bot2, bot3) is the accountId for that bot
  • Each account can independently configure enabled, name, allowFrom, systemPrompt, etc.
  • You may also skip the top-level default account and only configure bots inside accounts

Add a second bot via CLI (if the framework supports the --account parameter):

openclaw channels add --channel qqbot --account bot2 --token "222222222:secret-of-bot-2"

Sending Messages to a Specific Account's Users

When using openclaw message send, specify which bot to use with the --account parameter:

# Send with the default bot (no --account = uses "default")
openclaw message send --channel "qqbot" \
  --target "qqbot:c2c:OPENID" \
  --message "hello from default bot"

# Send with bot2
openclaw message send --channel "qqbot" \
  --account bot2 \
  --target "qqbot:c2c:OPENID" \
  --message "hello from bot2"

Target Formats:

FormatDescription
qqbot:c2c:OPENIDPrivate chat (C2C)
qqbot:group:GROUP_OPENIDGroup chat
qqbot:channel:CHANNEL_IDGuild channel

โš ๏ธ Important: Each bot has its own set of user OpenIDs. An OpenID received by Bot A cannot be used to send messages via Bot B โ€” this will result in a 500 error. Always use the matching bot's accountId to send messages to its users.

How It Works

  • When openclaw gateway starts, all accounts with enabled: true launch their own WebSocket connections
  • Each account maintains an independent Token cache (isolated by appId), preventing cross-contamination
  • Incoming message logs are prefixed with [qqbot:accountId] for easy debugging

Voice Configuration (STT / TTS)

STT (Speech-to-Text) โ€” Transcribe Incoming Voice Messages

STT supports two-level configuration with priority fallback:

PriorityConfig PathScope
1 (highest)channels.qqbot.sttPlugin-specific
2 (fallback)tools.media.audio.models[0]Framework-level
{
  "channels": {
    "qqbot": {
      "stt": {
        "provider": "your-provider",
        "model": "your-stt-model"
      }
    }
  }
}
  • provider โ€” references a key in models.providers to inherit baseUrl and apiKey
  • Set enabled: false to disable
  • When configured, incoming voice messages are automatically converted (SILKโ†’WAV) and transcribed

TTS (Text-to-Speech) โ€” Send Voice Messages

PriorityConfig PathScope
1 (highest)channels.qqbot.ttsPlugin-specific
2 (fallback)messages.ttsFramework-level
{
  "channels": {
    "qqbot": {
      "tts": {
        "provider": "your-provider",
        "model": "your-tts-model",
        "voice": "your-voice"
      }
    }
  }
}
  • provider โ€” references a key in models.providers to inherit baseUrl and apiKey
  • voice โ€” voice variant
  • Set enabled: false to disable (default: true)
  • When configured, AI can generate and send voice messages

๐Ÿค Contributors

Thanks to all the developers who have contributed to this project!

๐Ÿ’– Acknowledgements

Special thanks to @sliverp for outstanding contributions to the project!

sliverp

Thanks to Tencent Cloud Lighthouse for the deep collaboration. For raising crawfish, choose Tencent Cloud Lighthouse!

Tencent Cloud Lighthouse

โญ Star History

Star History Chart

FAQs

Package last updated on 23 Mar 2026

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts