Arang.dev
検索

OpenClaw Discord絵文字スキル開発記 - ユーザー承認ワークフローの実装

OpenClaw AIエージェントでDiscordの絵文字リアクションを検知してユーザーの意思決定を受け取るスキルを開発し、GitHubにアップロードした経験記。ClawdHubのデプロイ過程で遭遇した問題と解決策も共有。

#OpenClaw#Discord#AI Agent#Skill Development#ClawdHub
🌐 翻訳済み

この記事はAIによって韓国語から機械翻訳されています。原文と表現が異なる場合があります。

原文(韓国語)を読む

はじめに

AIエージェントを使っていると「これ、本当に実行していいのか?」という瞬間が訪れる。特にツイートの投稿、メールの送信、ファイルの削除のような取り返しのつかない操作ではなおさらだ。

そこで作った。Discordの絵文字リアクションでユーザーの承認を得るスキルを。

📸 Discordで 1️⃣ 2️⃣ 3️⃣ 🔥 ❌ の絵文字が付いたメッセージの例


問題の定義

OpenClawで「アルファハンター」というクリプト相場の自動Twitterボットを作っていた。AIがニュースを収集してツイート候補を生成するところまでは良いのだが、問題は承認なしにいきなり投稿してはいけないということ。

従来の方式の限界:

  • ✅/❌ の絵文字を使うと、Discordで見切れてしまい表示されない
  • 複数の候補の中から選択するのが難しい
  • 承認なしに投稿されてしまうケースが発生

解決策: 数字絵文字の承認システム

設計原則

이모지 승인 워크플로우

実装コード (approval_workflow.py)

class ApprovalManager:
    """승인 워크플로우 관리자"""
    
    EMOJI_MAP = {
        '1️⃣': 0,
        '2️⃣': 1,
        '3️⃣': 2,
        '🔥': 'all',
        '❌': 'reject'
    }
    
    def __init__(self):
        self.pending = {}  # message_id -> candidates
        self.approved = []  # 승인된 후보 큐
        
    def submit_candidates(self, candidates: list, message_id: str):
        """후보 제출 및 이모지 달기"""
        self.pending[message_id] = {
            'candidates': candidates,
            'submitted_at': datetime.now(),
            'expires_at': datetime.now() + timedelta(hours=24)
        }
        return self.EMOJI_MAP.keys()  # 달아야 할 이모지 목록
    
    def process_reaction(self, message_id: str, emoji: str):
        """이모지 반응 처리"""
        if message_id not in self.pending:
            return None
            
        action = self.EMOJI_MAP.get(emoji)
        candidates = self.pending[message_id]['candidates']
        
        if action == 'all':
            self.approved.extend(candidates)
        elif action == 'reject':
            del self.pending[message_id]
        elif isinstance(action, int) and action < len(candidates):
            self.approved.append(candidates[action])
            
        return self.approved

Discord連携

OpenClawの message ツールで絵文字を付ける:

# 후보 전송 후 이모지 달기
message_id = send_candidates_to_discord(candidates)
 
for emoji in ['1️⃣', '2️⃣', '3️⃣', '🔥', '❌']:
    message(
        action='react',
        channel='discord',
        messageId=message_id,
        emoji=emoji
    )

GitHubへのアップロード

スキルの開発が完了したら、GitHubにアップロードする必要がある。OpenClawのスキルは次の構造に従う:

skills/
└── discord-emoji-approval/
    ├── SKILL.md           # 스킬 문서
    ├── scripts/
    │   └── approval_workflow.py
    └── config.json        # 설정

SKILL.mdの作成

# Discord Emoji Approval Skill
 
디스코드 이모지 반응으로 사용자 승인을 받는 스킬.
 
## 사용법
 
1. 후보를 디스코드로 전송
2. 이모지 5개 달기 (1️⃣ 2️⃣ 3️⃣ 🔥 ❌)
3. 사용자가 이모지 클릭
4. 승인된 후보만 실행
 
## 의존성
- OpenClaw message 도구 (react 액션)

Gitのコミット & プッシュ

cd ~/.openclaw/workspace/skills/discord-emoji-approval
git add .
git commit -m "feat: 디스코드 이모지 승인 스킬 추가"
git push origin main

ClawdHubへのデプロイ試行 (失敗)

ClawdHub はOpenClawのスキルマーケットプレイスだ。作ったスキルを共有できる。

デプロイの試行

clawdhub publish ./skills/discord-emoji-approval

発生したエラー

Error: Unable to connect to clawdhub.com
Status: 503 Service Unavailable

サービスが一時的に不安定な状態だった。後で再度試すことにする。

代替案: GitHubから直接インストール

ClawdHubがダメなら、GitHubのURLで直接インストールできる:

# 다른 사람이 설치할 때
git clone https://github.com/arang/openclaw-skills.git
cp -r openclaw-skills/discord-emoji-approval ~/.openclaw/workspace/skills/

教訓

1. ユーザーの承認は必須

AIがどれだけ賢くても、取り返しのつかない操作は人間が確認する必要がある。

2. 絵文字は直感的

テキストで「1番を選択してください」と書くより、1️⃣ の絵文字のほうがはるかに速い。

3. キューイングシステムが必要

複数を選択した際に同時に実行すると、rate limitに引っかかる。順次実行が安全。

4. オフラインフォールバック

ClawdHubのような外部サービスが使えない場合に備えて、GitHubからの直接インストール方法も文書化しておこう。


おわりに

このスキルのおかげで、アルファハンターボットは「AIが勝手にツイートを投稿する危険なボット」から「人間が承認したらツイートする安全なボット」へと変わった。

次回は、実際にこの承認システムを活用して自己発展するAIエージェントを作った経験を共有する。


関連リンク:

コメント

コメントを読み込み中...
OpenClaw Discord絵文字スキル開発記 - ユーザー承認ワークフローの実装 | Arang