Not every bot needs to be serious. Some of the most beloved bots in QQ groups are the ones that run trivia games, tell jokes, manage RPG campaigns, or host group challenges. Entertainment bots drive engagement — and an engaged group is a group that also uses your bot's serious features.
Let's build some fun into your OpenClaw QQ bot.
Here's a counterintuitive truth: adding game functionality to a "productivity" bot increases usage of productivity features by 40-60%. Why? Because users who interact with the bot for fun develop a habit of talking to it. That habit carries over to work queries.
The classic. Set up a trivia system that runs in any QQ group:
# /opt/clawdbot/config/qq-games.yaml
skills:
trivia:
enabled: true
description: "Interactive trivia quiz game"
config:
categories:
- technology
- science
- history
- pop_culture
- geography
questions_per_round: 10
time_per_question_sec: 30
scoring:
correct: 10
speed_bonus: true # Faster answers get more points
leaderboard: "/opt/clawdbot/data/trivia-leaderboard.json"
In action:
User: "@bot trivia start technology"
Bot: "🎮 Trivia Round: Technology (10 questions)
Q1: What year was the first iPhone released?
A) 2005 B) 2006 C) 2007 D) 2008
⏱️ 30 seconds..."
Alice: "C"
Bot: "✅ @Alice got it! 2007 is correct. +10 points (answered in 3s, +5 speed bonus)
Scores: @Alice: 15 | @Bob: 0 | @Charlie: 0
Q2: Which programming language was created by Guido van Rossum?..."
A simple but addictive word game:
skills:
word-chain:
enabled: true
config:
language: "en"
min_word_length: 3
time_limit_sec: 15
dictionary: "/opt/clawdbot/data/dictionary.txt"
User: "@bot wordchain start"
Bot: "Word Chain started! I'll go first: ELEPHANT"
Alice: "TIGER"
Bot: "✅ T-I-G-E-R. @Bob, your turn! Start with R..."
Bob: "RAINBOW"
Bot: "✅ R-A-I-N-B-O-W. @Charlie, start with W..."
For the ambitious — a text-based RPG that runs in the group chat:
// /opt/clawdbot/skills/rpg-adventure.js
const { Skill } = require('@openclaw/sdk');
class RPGSkill extends Skill {
constructor() {
super({
name: 'rpg',
description: 'Text-based RPG adventure in QQ group',
triggers: ['rpg', 'adventure', 'quest']
});
this.gameState = {};
}
async execute(context) {
const groupId = context.group_id;
const userId = context.user_id;
const command = context.message.toLowerCase();
if (command.includes('start')) {
return this.startAdventure(groupId, userId);
}
if (command.includes('attack')) {
return this.handleCombat(groupId, userId, 'attack');
}
if (command.includes('explore')) {
return this.handleExplore(groupId, userId);
}
if (command.includes('stats')) {
return this.showStats(groupId, userId);
}
}
startAdventure(groupId, userId) {
this.gameState[groupId] = this.gameState[groupId] || {};
this.gameState[groupId][userId] = {
hp: 100, attack: 15, defense: 10,
level: 1, xp: 0, gold: 50,
location: 'village'
};
return {
reply: `⚔️ Welcome, adventurer! You start in a quiet village.\n` +
`HP: 100 | ATK: 15 | DEF: 10 | Gold: 50\n\n` +
`Commands: explore, attack, stats, shop\n` +
`What will you do?`
};
}
}
Every game needs a leaderboard:
{
"trivia": {
"all_time": [
{"user": "alice_qq", "score": 2450, "games": 32},
{"user": "bob_qq", "score": 1890, "games": 28},
{"user": "charlie_qq", "score": 1650, "games": 25}
],
"weekly": [
{"user": "bob_qq", "score": 340, "games": 5}
]
}
}
User: "@bot leaderboard trivia"
Bot: "🏆 Trivia All-Time Leaderboard:
1. @Alice — 2,450 pts (32 games)
2. @Bob — 1,890 pts (28 games)
3. @Charlie — 1,650 pts (25 games)
This week's leader: @Bob with 340 pts!"
Get your entertainment-ready bot running:
Upload the game configs:
scp qq-games.yaml root@YOUR_LIGHTHOUSE_IP:/opt/clawdbot/config/
ssh root@YOUR_LIGHTHOUSE_IP "sudo systemctl restart clawdbot"
Games can get spammy. Protect the group experience:
game_limits:
max_active_games_per_group: 2
cooldown_between_games_min: 5
max_game_duration_min: 30
quiet_hours:
start: "23:00"
end: "08:00"
message: "Game features are paused during quiet hours. See you tomorrow!"
Track what's working:
#!/bin/bash
echo "=== Game Engagement Report ==="
echo "Games played today: $(grep -c 'game_start' /var/log/clawdbot/output.log)"
echo "Most popular game: $(grep 'game_start' /var/log/clawdbot/output.log | grep -oP 'game=\K[^ ]+' | sort | uniq -c | sort -rn | head -1)"
echo "Unique players: $(grep 'game_' /var/log/clawdbot/output.log | grep -oP 'user=\K[^ ]+' | sort -u | wc -l)"
echo "Avg game duration: $(grep 'game_end' /var/log/clawdbot/output.log | grep -oP 'duration=\K[0-9]+' | awk '{sum+=$1;n++} END{print int(sum/n) "s"}')"
Entertainment features aren't fluff — they're engagement multipliers. A bot that makes people smile is a bot that gets used.
Work hard. Play harder. Bot smarter.