ねるちゃん Bot

Discord上でカスタムコマンドを登録・実行できるBot

コマンド一覧

コマンド 説明
!register <名前> <テキスト> テキストコマンドを登録
!register_code <名前> <コード> コードコマンドを登録
!smart_register <名前> <説明> 自然言語からコードコマンドを自動生成
!<コマンド名> [引数...] 登録したコマンドを実行

テキストコマンドの登録

!register コマンドで、シンプルなテキストコマンドを登録できます。

構文
!register <コマンド名> <テキスト>
!register hello こんにちは!

上記を実行すると、hello というコマンドが登録されます。その後、チャットで hello と入力すると、Botが「こんにちは!」と返答します。

コードコマンドの登録

!register_code コマンドで、Pythonコードを含むコマンドを登録できます。

構文
!register_code <コマンド名> <コード>

シンプルな例

!register_code greet print("Hello, World!")

バッククォートを使った例

!register_code dice
```python
import random
print(random.randint(1, 6))
```

変数を使った例

!register_code welcome
```python
print(f"ようこそ、{username}さん!")
```

スマートコマンド登録

!smart_register コマンドで、自然言語の説明からPythonコードを自動生成してコマンドを登録できます。

構文
!smart_register <コマンド名> <説明>
!smart_register dice 1から6までのランダムな数字を出力する

上記を実行すると、LLMが説明に基づいてPythonコードを生成し、diceコマンドとして登録します。

複雑な例
!smart_register fortune おみくじを引いて運勢を表示する。大吉、吉、中吉、小吉、凶があり、それぞれに合ったメッセージも表示する
  • コードは自動生成されるため、意図した動作にならない場合があります
  • 必要に応じて !register_code で手動修正できます
  • 生成されたコードはビルトイン関数(llm, mget等)を使用できます

コマンドの実行

コードコマンドの実行

登録したコードコマンドは ! プレフィックスを付けて実行します。

!dice

引数を渡すこともできます:

!mycommand arg1 arg2 arg3

テキストコマンドの実行

登録したテキストコマンドは、プレフィックスなしでコマンド名を入力するだけで実行できます。

hello

利用可能な変数

コードコマンド内では、以下の変数が自動的に利用可能です:

変数名 説明
username コマンドを実行したユーザーの表示名
user_id コマンドを実行したユーザーのDiscord ID
user_avatar コマンドを実行したユーザーのアバターID
args コマンドに渡された引数のリスト(args[0], args[1]...でアクセス)
変数の使用例
!register_code profile
```python
print(f"ユーザー名: {username}")
print(f"ユーザーID: {user_id}")
```
引数を使った例
!register_code add
```python
result = int(args[0]) + int(args[1])
print(f"{args[0]} + {args[1]} = {result}")
```

実行:

!add 10 20

出力: 10 + 20 = 30

ビルトイン関数

コードコマンド内では、以下の関数がデフォルトで利用可能です:

関数 説明
llm(prompt: str) LLM(AI)にプロンプトを送信し、応答テキストを取得
mget(query: str, top_k: int = 6) メモリからセマンティック検索で関連情報を取得(RAG)
mllm(prompt: str, top_k: int = 6) メモリを参照してLLMで回答を生成(RAG対応LLM)
automemory(text: str) テキストから情報を自動抽出してメモリに保存
cs(s: str) 文字列をDiscordのコードブロック(```)で囲む

また、requestsライブラリがインポート済みです。

llm関数の使用例
!register_code ask
```python
question = " ".join(args)
answer = llm(question)
print(answer)
```

実行:

!ask 今日の天気は?
cs関数の使用例
!register_code code
```python
code = "print('Hello, World!')"
print(cs(code))
```

出力: ```print('Hello, World!')```(コードブロックとして表示)

requestsの使用例
!register_code ip
```python
response = requests.get("https://api.ipify.org?format=json")
data = response.json()
print(f"IP: {data['ip']}")
```

メモリ関連関数

ねるちゃんは会話の内容をメモリに保存し、後から検索・参照できます。

mget関数の使用例(メモリ検索)
!register_code search
```python
query = " ".join(args)
results = mget(query, 5)  # 上位5件を検索
for r in results:
    print(f"- {r['content']} (score: {r['score']:.2f})")
```

実行:

!search 好きな食べ物
mllm関数の使用例(メモリ参照付きLLM)
!register_code recall
```python
question = " ".join(args)
# メモリを参照しながらLLMが回答
answer = mllm(question, 6)
print(answer)
```

実行:

!recall Aさんの好きな食べ物は?
automemory関数の使用例(自動メモリ保存)
!register_code remember
```python
text = " ".join(args)
count = automemory(text)
print(f"{count}件の情報をメモリに保存しました")
```

実行:

!remember Aさんはカレーが好きで、Bさんはラーメンが好き

コードの書き方

コードは以下の形式で記述できます:

1プレーンテキスト
!register_code test print("hello")
2シングルバッククォート
!register_code test `print("hello")`
3トリプルバッククォート(言語指定あり)
!register_code test
```python
print("hello")
```
4トリプルバッククォート(言語指定なし)
!register_code test
```
print("hello")
```

注意事項

  • 同じ名前のコマンドを重複して登録することはできません
  • コードコマンドはサンドボックス環境で実行されます
  • 実行結果は標準出力(print文)で出力されます