create-message-kit 1.1.7-beta.17 → 1.1.7-beta.19
Sign up to get free protection for your applications and to get access to all the features.
- package/package.json +1 -1
- package/templates/agent/src/handler/ens.ts +12 -12
- package/templates/agent/src/prompt.ts +6 -2
- package/templates/agent/src/skills.ts +8 -8
- package/templates/gm/src/index.ts +12 -7
- package/templates/gm/src/skills.ts +29 -0
- package/templates/group/src/handler/agent.ts +15 -52
- package/templates/group/src/handler/game.ts +4 -4
- package/templates/group/src/handler/helpers.ts +8 -5
- package/templates/group/src/handler/tipping.ts +9 -23
- package/templates/group/src/handler/transaction.ts +7 -8
- package/templates/group/src/index.ts +25 -5
- package/templates/group/src/prompt.ts +25 -0
- package/templates/group/src/skills.ts +14 -51
package/package.json
CHANGED
@@ -13,15 +13,15 @@ export async function handleEns(
|
|
13
13
|
const {
|
14
14
|
message: {
|
15
15
|
sender,
|
16
|
-
content: {
|
16
|
+
content: { skill, params },
|
17
17
|
},
|
18
18
|
} = context;
|
19
|
-
|
20
|
-
if (
|
19
|
+
|
20
|
+
if (skill == "reset") {
|
21
21
|
clearMemory();
|
22
22
|
return { code: 200, message: "Conversation reset." };
|
23
|
-
} else if (
|
24
|
-
// Destructure and validate parameters for the ens
|
23
|
+
} else if (skill == "renew") {
|
24
|
+
// Destructure and validate parameters for the ens
|
25
25
|
const { domain } = params;
|
26
26
|
// Check if the user holds the domain
|
27
27
|
if (!domain) {
|
@@ -44,8 +44,8 @@ export async function handleEns(
|
|
44
44
|
// Generate URL for the ens
|
45
45
|
let url_ens = frameUrl + "frames/manage?name=" + domain;
|
46
46
|
return { code: 200, message: `${url_ens}` };
|
47
|
-
} else if (
|
48
|
-
// Destructure and validate parameters for the ens
|
47
|
+
} else if (skill == "register") {
|
48
|
+
// Destructure and validate parameters for the ens
|
49
49
|
const { domain } = params;
|
50
50
|
|
51
51
|
if (!domain) {
|
@@ -57,7 +57,7 @@ export async function handleEns(
|
|
57
57
|
// Generate URL for the ens
|
58
58
|
let url_ens = ensUrl + domain;
|
59
59
|
return { code: 200, message: `${url_ens}` };
|
60
|
-
} else if (
|
60
|
+
} else if (skill == "info") {
|
61
61
|
const { domain } = params;
|
62
62
|
|
63
63
|
const data = await getUserInfo(domain);
|
@@ -94,7 +94,7 @@ export async function handleEns(
|
|
94
94
|
);
|
95
95
|
}
|
96
96
|
return { code: 200, message };
|
97
|
-
} else if (
|
97
|
+
} else if (skill == "check") {
|
98
98
|
const { domain } = params;
|
99
99
|
|
100
100
|
if (!domain) {
|
@@ -119,7 +119,7 @@ export async function handleEns(
|
|
119
119
|
message,
|
120
120
|
};
|
121
121
|
}
|
122
|
-
} else if (
|
122
|
+
} else if (skill == "tip") {
|
123
123
|
const { address } = params;
|
124
124
|
if (!address) {
|
125
125
|
return {
|
@@ -136,7 +136,7 @@ export async function handleEns(
|
|
136
136
|
code: 200,
|
137
137
|
message: txUrl,
|
138
138
|
};
|
139
|
-
} else if (
|
139
|
+
} else if (skill == "cool") {
|
140
140
|
const { domain } = params;
|
141
141
|
//What about these cool alternatives?\
|
142
142
|
return {
|
@@ -144,7 +144,7 @@ export async function handleEns(
|
|
144
144
|
message: `${generateCoolAlternatives(domain)}`,
|
145
145
|
};
|
146
146
|
} else {
|
147
|
-
return { code: 400, message: "
|
147
|
+
return { code: 400, message: "Skill not found." };
|
148
148
|
}
|
149
149
|
}
|
150
150
|
|
@@ -13,7 +13,7 @@ export async function agent_prompt(userInfo: UserInfo) {
|
|
13
13
|
PROMPT_USER_CONTENT(userInfo) +
|
14
14
|
PROMPT_SKILLS_AND_EXAMPLES(skills, "@ens");
|
15
15
|
|
16
|
-
|
16
|
+
let fineTunning = `
|
17
17
|
|
18
18
|
## Example responses:
|
19
19
|
|
@@ -53,12 +53,16 @@ export async function agent_prompt(userInfo: UserInfo) {
|
|
53
53
|
But you forgot to add the command at the end of the message.
|
54
54
|
You should have said something like: "Looks like vitalik.eth is registered! What about these cool alternatives?\n/cool vitalik.eth
|
55
55
|
`;
|
56
|
+
|
57
|
+
// Add the fine tuning to the system prompt
|
58
|
+
systemPrompt += fineTunning;
|
59
|
+
|
60
|
+
// Replace the variables in the system prompt
|
56
61
|
systemPrompt = PROMPT_REPLACE_VARIABLES(
|
57
62
|
systemPrompt,
|
58
63
|
userInfo?.address ?? "",
|
59
64
|
userInfo,
|
60
65
|
"@ens",
|
61
66
|
);
|
62
|
-
console.log(systemPrompt);
|
63
67
|
return systemPrompt;
|
64
68
|
}
|
@@ -8,7 +8,7 @@ export const skills: SkillGroup[] = [
|
|
8
8
|
description: "Register ENS domains.",
|
9
9
|
skills: [
|
10
10
|
{
|
11
|
-
|
11
|
+
skill: "/register [domain]",
|
12
12
|
triggers: ["/register"],
|
13
13
|
handler: handleEns,
|
14
14
|
description:
|
@@ -21,7 +21,7 @@ export const skills: SkillGroup[] = [
|
|
21
21
|
},
|
22
22
|
},
|
23
23
|
{
|
24
|
-
|
24
|
+
skill: "/exists",
|
25
25
|
examples: ["/exists"],
|
26
26
|
handler: handleEns,
|
27
27
|
triggers: ["/exists"],
|
@@ -33,7 +33,7 @@ export const skills: SkillGroup[] = [
|
|
33
33
|
},
|
34
34
|
},
|
35
35
|
{
|
36
|
-
|
36
|
+
skill: "/info [domain]",
|
37
37
|
triggers: ["/info"],
|
38
38
|
handler: handleEns,
|
39
39
|
description:
|
@@ -46,7 +46,7 @@ export const skills: SkillGroup[] = [
|
|
46
46
|
},
|
47
47
|
},
|
48
48
|
{
|
49
|
-
|
49
|
+
skill: "/renew [domain]",
|
50
50
|
triggers: ["/renew"],
|
51
51
|
handler: handleEns,
|
52
52
|
description:
|
@@ -59,7 +59,7 @@ export const skills: SkillGroup[] = [
|
|
59
59
|
},
|
60
60
|
},
|
61
61
|
{
|
62
|
-
|
62
|
+
skill: "/check [domain]",
|
63
63
|
triggers: ["/check"],
|
64
64
|
handler: handleEns,
|
65
65
|
examples: ["/check vitalik.eth", "/check fabri.base.eth"],
|
@@ -71,7 +71,7 @@ export const skills: SkillGroup[] = [
|
|
71
71
|
},
|
72
72
|
},
|
73
73
|
{
|
74
|
-
|
74
|
+
skill: "/cool [domain]",
|
75
75
|
triggers: ["/cool"],
|
76
76
|
examples: ["/cool vitalik.eth"],
|
77
77
|
handler: handleEns,
|
@@ -83,7 +83,7 @@ export const skills: SkillGroup[] = [
|
|
83
83
|
},
|
84
84
|
},
|
85
85
|
{
|
86
|
-
|
86
|
+
skill: "/reset",
|
87
87
|
triggers: ["/reset"],
|
88
88
|
examples: ["/reset"],
|
89
89
|
handler: handleEns,
|
@@ -91,7 +91,7 @@ export const skills: SkillGroup[] = [
|
|
91
91
|
params: {},
|
92
92
|
},
|
93
93
|
{
|
94
|
-
|
94
|
+
skill: "/tip [address]",
|
95
95
|
description: "Show a URL for tipping a domain owner.",
|
96
96
|
triggers: ["/tip"],
|
97
97
|
handler: handleEns,
|
@@ -1,9 +1,14 @@
|
|
1
1
|
import { run, HandlerContext } from "@xmtp/message-kit";
|
2
|
+
import { skills } from "./skills.js";
|
3
|
+
run(
|
4
|
+
async (context: HandlerContext) => {
|
5
|
+
// Get the message and the address from the sender
|
6
|
+
const { content, sender } = context.message;
|
2
7
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
8
|
+
// To reply, just call `reply` on the HandlerContext
|
9
|
+
await context.send(`gm`);
|
10
|
+
},
|
11
|
+
{
|
12
|
+
skills: skills,
|
13
|
+
},
|
14
|
+
);
|
@@ -0,0 +1,29 @@
|
|
1
|
+
import type { SkillGroup } from "@xmtp/message-kit";
|
2
|
+
|
3
|
+
export const skills: SkillGroup[] = [
|
4
|
+
{
|
5
|
+
name: "Group bot",
|
6
|
+
tag: "@bot",
|
7
|
+
description: "Group bot for tipping and transactions.",
|
8
|
+
skills: [
|
9
|
+
{
|
10
|
+
skill: "/tip [usernames] [amount] [token]",
|
11
|
+
triggers: ["/tip"],
|
12
|
+
examples: ["/tip @vitalik 10 usdc"],
|
13
|
+
description: "Tip users in a specified token.",
|
14
|
+
handler: undefined,
|
15
|
+
params: {
|
16
|
+
username: {
|
17
|
+
default: "",
|
18
|
+
plural: true,
|
19
|
+
type: "username",
|
20
|
+
},
|
21
|
+
amount: {
|
22
|
+
default: 10,
|
23
|
+
type: "number",
|
24
|
+
},
|
25
|
+
},
|
26
|
+
},
|
27
|
+
],
|
28
|
+
},
|
29
|
+
];
|
@@ -1,68 +1,31 @@
|
|
1
|
-
import {
|
2
|
-
import { textGeneration } from "@xmtp/message-kit";
|
1
|
+
import { run, HandlerContext } from "@xmtp/message-kit";
|
2
|
+
import { textGeneration, processMultilineResponse } from "@xmtp/message-kit";
|
3
|
+
import { agent_prompt } from "../prompt.js";
|
4
|
+
import { getUserInfo } from "@xmtp/message-kit";
|
3
5
|
|
4
|
-
|
6
|
+
run(async (context: HandlerContext) => {
|
5
7
|
const {
|
6
8
|
message: {
|
9
|
+
content: { text, params },
|
7
10
|
sender,
|
8
|
-
content: { params, text },
|
9
11
|
},
|
10
12
|
} = context;
|
11
13
|
|
12
|
-
const systemPrompt = generateSystemPrompt(context);
|
13
14
|
try {
|
14
15
|
let userPrompt = params?.prompt ?? text;
|
15
|
-
|
16
|
+
const userInfo = await getUserInfo(sender.address);
|
17
|
+
if (!userInfo) {
|
18
|
+
console.log("User info not found");
|
19
|
+
return;
|
20
|
+
}
|
16
21
|
const { reply } = await textGeneration(
|
17
22
|
sender.address,
|
18
23
|
userPrompt,
|
19
|
-
|
24
|
+
await agent_prompt(userInfo),
|
20
25
|
);
|
21
|
-
|
22
|
-
try {
|
23
|
-
await context.executeSkill(reply);
|
24
|
-
} catch (error) {
|
25
|
-
console.error("Error executing skill:", error);
|
26
|
-
await context.reply("Failed to execute the requested action.");
|
27
|
-
}
|
26
|
+
await processMultilineResponse(sender.address, reply, context);
|
28
27
|
} catch (error) {
|
29
28
|
console.error("Error during OpenAI call:", error);
|
30
|
-
await context.
|
29
|
+
await context.send("An error occurred while processing your request.");
|
31
30
|
}
|
32
|
-
}
|
33
|
-
|
34
|
-
function generateSystemPrompt(context: HandlerContext) {
|
35
|
-
const {
|
36
|
-
members,
|
37
|
-
skills,
|
38
|
-
message: { sender },
|
39
|
-
} = context;
|
40
|
-
|
41
|
-
const systemPrompt = `
|
42
|
-
### Context
|
43
|
-
|
44
|
-
You are a helpful bot agent that lives inside a web3 messaging group that helps interpret user requests and execute commands.
|
45
|
-
#### Users
|
46
|
-
${JSON.stringify(
|
47
|
-
members?.map((member: AbstractedMember) => ({
|
48
|
-
...member,
|
49
|
-
username: `@${member.accountAddresses[0]}`,
|
50
|
-
})),
|
51
|
-
)}\n
|
52
|
-
#### Commands
|
53
|
-
${JSON.stringify(skills)}\n
|
54
|
-
The message was sent by @${sender?.address}
|
55
|
-
|
56
|
-
### Examples
|
57
|
-
prompt /agent tip alix and bo
|
58
|
-
reply /tip @alix @bo 10
|
59
|
-
|
60
|
-
Important:
|
61
|
-
- If a user asks jokes, make jokes about web3 devs\n
|
62
|
-
- If the user asks about performing an action and you can think of a command that would help, answer directly with the command and nothing else.
|
63
|
-
- Populate the command with the correct or random values. Always return skills with real values only, using usernames with @ and excluding addresses.\n
|
64
|
-
- If the user asks a question or makes a statement that does not clearly map to a command, respond with helpful information or a clarification question.\n
|
65
|
-
- If the user is grateful, respond asking for a tip in a playful manner.
|
66
|
-
`;
|
67
|
-
return systemPrompt;
|
68
|
-
}
|
31
|
+
});
|
@@ -1,13 +1,13 @@
|
|
1
1
|
import { HandlerContext } from "@xmtp/message-kit";
|
2
2
|
|
3
|
-
// Handler function to process game-related
|
3
|
+
// Handler function to process game-related
|
4
4
|
export async function handler(context: HandlerContext) {
|
5
5
|
const {
|
6
6
|
message: {
|
7
|
-
content: {
|
7
|
+
content: { skill, params, text },
|
8
8
|
},
|
9
9
|
} = context;
|
10
|
-
if (!
|
10
|
+
if (!skill) {
|
11
11
|
if (text === "🔎" || text === "🔍") {
|
12
12
|
// Send the URL for the requested game
|
13
13
|
context.reply("https://framedl.xyz/");
|
@@ -35,7 +35,7 @@ export async function handler(context: HandlerContext) {
|
|
35
35
|
default:
|
36
36
|
// Inform the user about unrecognized skills and provide available options
|
37
37
|
context.send(
|
38
|
-
"
|
38
|
+
"Skill not recognized. Available games: wordle, slot, or help.",
|
39
39
|
);
|
40
40
|
}
|
41
41
|
}
|
@@ -4,22 +4,25 @@ export async function handler(context: HandlerContext) {
|
|
4
4
|
const {
|
5
5
|
skills,
|
6
6
|
message: {
|
7
|
-
content: {
|
7
|
+
content: { skill },
|
8
8
|
},
|
9
9
|
group,
|
10
10
|
} = context;
|
11
11
|
|
12
|
-
if (
|
12
|
+
if (skill == "help") {
|
13
13
|
const intro =
|
14
14
|
"Available experiences:\n" +
|
15
15
|
skills
|
16
16
|
?.flatMap((app) => app.skills)
|
17
|
-
.map((skill) => `${skill.
|
17
|
+
.map((skill) => `${skill.skill} - ${skill.description}`)
|
18
18
|
.join("\n") +
|
19
19
|
"\nUse these skills to interact with specific apps.";
|
20
20
|
context.send(intro);
|
21
|
-
} else if (
|
22
|
-
|
21
|
+
} else if (skill == "id") {
|
22
|
+
if (!group?.id) {
|
23
|
+
context.send("This skill only works in group chats.");
|
24
|
+
return;
|
25
|
+
}
|
23
26
|
context.send(group?.id);
|
24
27
|
}
|
25
28
|
}
|
@@ -8,33 +8,20 @@ import { getUserInfo } from "@xmtp/message-kit";
|
|
8
8
|
export async function handler(context: HandlerContext): Promise<SkillResponse> {
|
9
9
|
const {
|
10
10
|
members,
|
11
|
-
getMessageById,
|
12
11
|
message: {
|
13
|
-
content: {
|
12
|
+
content: {
|
13
|
+
reference,
|
14
|
+
reply,
|
15
|
+
text,
|
16
|
+
skill,
|
17
|
+
params: { amount, username },
|
18
|
+
},
|
14
19
|
sender,
|
15
|
-
typeId,
|
16
20
|
},
|
17
21
|
} = context;
|
18
|
-
|
19
|
-
const replyReceiver = members?.find(
|
20
|
-
(member) => member.inboxId === msg?.senderInboxId,
|
21
|
-
);
|
22
|
-
let amount: number = 0,
|
23
|
-
receivers: AbstractedMember[] = [];
|
24
|
-
// Handle different types of messages
|
25
|
-
if (typeId === "reply" && replyReceiver) {
|
26
|
-
if (reply?.includes("degen")) {
|
27
|
-
receivers = [replyReceiver];
|
28
|
-
const match = reply.match(/(\d+)/);
|
29
|
-
if (match)
|
30
|
-
amount = parseInt(match[0]); // Extract amount from reply
|
31
|
-
else amount = 10;
|
32
|
-
}
|
33
|
-
} else if (typeId === "text" && text?.startsWith("/tip") && params) {
|
34
|
-
// Process text skills starting with "/tip"
|
35
|
-
const { amount: extractedAmount, username } = params;
|
36
|
-
amount = extractedAmount || 10; // Default amount if not specified
|
22
|
+
let receivers: AbstractedMember[] = [];
|
37
23
|
|
24
|
+
if (skill === "tip") {
|
38
25
|
receivers = await Promise.all(
|
39
26
|
username.map((username: string) => getUserInfo(username)),
|
40
27
|
);
|
@@ -47,7 +34,6 @@ export async function handler(context: HandlerContext): Promise<SkillResponse> {
|
|
47
34
|
};
|
48
35
|
}
|
49
36
|
const receiverAddresses = receivers.map((receiver) => receiver.address);
|
50
|
-
// Process sending tokens to each receiver
|
51
37
|
|
52
38
|
context.sendTo(
|
53
39
|
`You received ${amount} tokens from ${sender.address}.`,
|
@@ -1,17 +1,17 @@
|
|
1
1
|
import { getUserInfo, HandlerContext, SkillResponse } from "@xmtp/message-kit";
|
2
2
|
|
3
|
-
// Main handler function for processing
|
3
|
+
// Main handler function for processing
|
4
4
|
export async function handler(context: HandlerContext): Promise<SkillResponse> {
|
5
5
|
const {
|
6
6
|
message: {
|
7
|
-
content: {
|
7
|
+
content: { skill, params },
|
8
8
|
},
|
9
9
|
} = context;
|
10
10
|
const baseUrl = "https://base-tx-frame.vercel.app/transaction";
|
11
11
|
|
12
|
-
switch (
|
12
|
+
switch (skill) {
|
13
13
|
case "send":
|
14
|
-
// Destructure and validate parameters for the send
|
14
|
+
// Destructure and validate parameters for the send
|
15
15
|
const { amount: amountSend, token: tokenSend, username } = params; // [!code hl] // [!code focus]
|
16
16
|
let senderInfo = await getUserInfo(username);
|
17
17
|
if (!amountSend || !tokenSend || !senderInfo) {
|
@@ -32,7 +32,7 @@ export async function handler(context: HandlerContext): Promise<SkillResponse> {
|
|
32
32
|
message: `${sendUrl}`,
|
33
33
|
};
|
34
34
|
case "swap":
|
35
|
-
// Destructure and validate parameters for the swap
|
35
|
+
// Destructure and validate parameters for the swap
|
36
36
|
const { amount, token_from, token_to } = params; // [!code hl] // [!code focus]
|
37
37
|
|
38
38
|
if (!amount || !token_from || !token_to) {
|
@@ -60,11 +60,10 @@ export async function handler(context: HandlerContext): Promise<SkillResponse> {
|
|
60
60
|
message: `${baseUrl.replace("/transaction", "")}`,
|
61
61
|
};
|
62
62
|
default:
|
63
|
-
|
64
|
-
context.reply("Unknown command. Use help to see all available commands.");
|
63
|
+
context.reply("Unknown skill. Use help to see all available skills.");
|
65
64
|
return {
|
66
65
|
code: 400,
|
67
|
-
message: "Unknown
|
66
|
+
message: "Unknown skill. Use help to see all available skills.",
|
68
67
|
};
|
69
68
|
}
|
70
69
|
}
|
@@ -1,12 +1,32 @@
|
|
1
1
|
import { run, HandlerContext } from "@xmtp/message-kit";
|
2
|
+
import { textGeneration, processMultilineResponse } from "@xmtp/message-kit";
|
3
|
+
import { agent_prompt } from "./prompt.js";
|
4
|
+
import { getUserInfo } from "@xmtp/message-kit";
|
2
5
|
|
3
|
-
// Main function to run the app
|
4
6
|
run(async (context: HandlerContext) => {
|
5
|
-
const {
|
7
|
+
const {
|
8
|
+
message: {
|
9
|
+
content: { text, params },
|
10
|
+
sender,
|
11
|
+
},
|
12
|
+
group,
|
13
|
+
} = context;
|
6
14
|
|
7
|
-
|
8
|
-
|
9
|
-
|
15
|
+
try {
|
16
|
+
let userPrompt = params?.prompt ?? text;
|
17
|
+
const userInfo = await getUserInfo(sender.address);
|
18
|
+
if (!userInfo) {
|
19
|
+
console.log("User info not found");
|
20
|
+
return;
|
21
|
+
}
|
22
|
+
const { reply } = await textGeneration(
|
23
|
+
sender.address,
|
24
|
+
userPrompt,
|
25
|
+
await agent_prompt(userInfo),
|
10
26
|
);
|
27
|
+
await processMultilineResponse(sender.address, reply, context);
|
28
|
+
} catch (error) {
|
29
|
+
console.error("Error during OpenAI call:", error);
|
30
|
+
await context.send("An error occurred while processing your request.");
|
11
31
|
}
|
12
32
|
});
|
@@ -0,0 +1,25 @@
|
|
1
|
+
import { skills } from "./skills.js";
|
2
|
+
import {
|
3
|
+
UserInfo,
|
4
|
+
PROMPT_USER_CONTENT,
|
5
|
+
PROMPT_RULES,
|
6
|
+
PROMPT_SKILLS_AND_EXAMPLES,
|
7
|
+
PROMPT_REPLACE_VARIABLES,
|
8
|
+
} from "@xmtp/message-kit";
|
9
|
+
|
10
|
+
export async function agent_prompt(userInfo: UserInfo) {
|
11
|
+
let systemPrompt =
|
12
|
+
PROMPT_RULES +
|
13
|
+
PROMPT_USER_CONTENT(userInfo) +
|
14
|
+
PROMPT_SKILLS_AND_EXAMPLES(skills, "@bot");
|
15
|
+
|
16
|
+
// Replace the variables in the system prompt
|
17
|
+
systemPrompt = PROMPT_REPLACE_VARIABLES(
|
18
|
+
systemPrompt,
|
19
|
+
userInfo?.address ?? "",
|
20
|
+
userInfo,
|
21
|
+
"@bot",
|
22
|
+
);
|
23
|
+
console.log(systemPrompt);
|
24
|
+
return systemPrompt;
|
25
|
+
}
|
@@ -1,18 +1,17 @@
|
|
1
1
|
import { handler as tipping } from "./handler/tipping.js";
|
2
|
-
import { handler as agent } from "./handler/agent.js";
|
3
2
|
import { handler as transaction } from "./handler/transaction.js";
|
4
3
|
import { handler as games } from "./handler/game.js";
|
5
|
-
import { handler as
|
4
|
+
import { handler as help } from "./handler/helpers.js";
|
6
5
|
import type { SkillGroup } from "@xmtp/message-kit";
|
7
6
|
|
8
7
|
export const skills: SkillGroup[] = [
|
9
8
|
{
|
10
|
-
name: "
|
9
|
+
name: "Group bot",
|
11
10
|
tag: "@bot",
|
12
|
-
description: "
|
11
|
+
description: "Group bot for tipping and transactions.",
|
13
12
|
skills: [
|
14
13
|
{
|
15
|
-
|
14
|
+
skill: "/tip [usernames] [amount] [token]",
|
16
15
|
triggers: ["/tip"],
|
17
16
|
examples: ["/tip @vitalik 10 usdc"],
|
18
17
|
description: "Tip users in a specified token.",
|
@@ -29,15 +28,8 @@ export const skills: SkillGroup[] = [
|
|
29
28
|
},
|
30
29
|
},
|
31
30
|
},
|
32
|
-
],
|
33
|
-
},
|
34
|
-
|
35
|
-
{
|
36
|
-
name: "Transactions",
|
37
|
-
description: "Multipurpose transaction frame built onbase.",
|
38
|
-
skills: [
|
39
31
|
{
|
40
|
-
|
32
|
+
skill: "/send [amount] [token] [username]",
|
41
33
|
triggers: ["/send"],
|
42
34
|
examples: ["/send 10 usdc @vitalik"],
|
43
35
|
description:
|
@@ -60,7 +52,7 @@ export const skills: SkillGroup[] = [
|
|
60
52
|
},
|
61
53
|
},
|
62
54
|
{
|
63
|
-
|
55
|
+
skill: "/swap [amount] [token_from] [token_to]",
|
64
56
|
triggers: ["/swap"],
|
65
57
|
examples: ["/swap 10 usdc eth"],
|
66
58
|
description: "Exchange one type of cryptocurrency for another.",
|
@@ -83,24 +75,19 @@ export const skills: SkillGroup[] = [
|
|
83
75
|
},
|
84
76
|
},
|
85
77
|
{
|
86
|
-
|
78
|
+
skill: "/show",
|
87
79
|
triggers: ["/show"],
|
88
80
|
examples: ["/show"],
|
89
81
|
handler: transaction,
|
90
82
|
description: "Show the whole frame.",
|
91
83
|
params: {},
|
92
84
|
},
|
93
|
-
],
|
94
|
-
},
|
95
|
-
{
|
96
|
-
name: "Games",
|
97
|
-
description: "Provides various gaming experiences.",
|
98
|
-
skills: [
|
99
85
|
{
|
100
|
-
|
86
|
+
skill: "/game [game]",
|
101
87
|
triggers: ["/game", "🔎", "🔍"],
|
102
88
|
handler: games,
|
103
89
|
description: "Play a game.",
|
90
|
+
examples: ["/game wordle", "/game slot", "/game help"],
|
104
91
|
params: {
|
105
92
|
game: {
|
106
93
|
default: "",
|
@@ -109,43 +96,19 @@ export const skills: SkillGroup[] = [
|
|
109
96
|
},
|
110
97
|
},
|
111
98
|
},
|
112
|
-
],
|
113
|
-
},
|
114
|
-
{
|
115
|
-
name: "Agent",
|
116
|
-
description: "Manage agent commands.",
|
117
|
-
skills: [
|
118
|
-
{
|
119
|
-
command: "/agent [prompt]",
|
120
|
-
triggers: ["/agent", "@agent", "@bot"],
|
121
|
-
examples: ["/agent @vitalik"],
|
122
|
-
handler: agent,
|
123
|
-
description: "Manage agent commands.",
|
124
|
-
params: {
|
125
|
-
prompt: {
|
126
|
-
default: "",
|
127
|
-
type: "prompt",
|
128
|
-
},
|
129
|
-
},
|
130
|
-
},
|
131
|
-
],
|
132
|
-
},
|
133
|
-
{
|
134
|
-
name: "Help",
|
135
|
-
description: "Get help with the bot.",
|
136
|
-
skills: [
|
137
99
|
{
|
138
|
-
|
100
|
+
skill: "/help",
|
139
101
|
triggers: ["/help"],
|
140
102
|
examples: ["/help"],
|
141
|
-
handler:
|
103
|
+
handler: help,
|
142
104
|
description: "Get help with the bot.",
|
143
105
|
params: {},
|
144
106
|
},
|
145
107
|
{
|
146
|
-
|
108
|
+
skill: "/id",
|
147
109
|
adminOnly: true,
|
148
|
-
|
110
|
+
examples: ["/id"],
|
111
|
+
handler: help,
|
149
112
|
triggers: ["/id"],
|
150
113
|
description: "Get the group ID.",
|
151
114
|
params: {},
|