diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/discord-manager.ts b/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/discord-manager.ts index 67e7e1fb1..5b50d380e 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/discord-manager.ts +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/discord-manager.ts @@ -20,6 +20,7 @@ import { import { QueueManager, } from 'queue-manager'; +import { SceneObject } from './scene-object'; // @@ -233,11 +234,17 @@ export class DiscordBot extends EventTarget { return } + const scene = new SceneObject({ + name: 'Discord Channel Conversation', + description: 'A conversation happening in a Discord channel.', + }); + const conversation = new ConversationObject({ agent, getHash: () => { return `discord:channel:${channelId}`; }, + scene, }); this.agent.conversationManager.addConversation(conversation); @@ -279,11 +286,17 @@ export class DiscordBot extends EventTarget { return } + const scene = new SceneObject({ + name: 'Discord Direct Message Conversation', + description: 'A conversation happening with a user on Discord.', + }); + const conversation = new ConversationObject({ agent, getHash: () => { return `discord:dm:${userId}`; }, + scene, }); this.agent.conversationManager.addConversation(conversation); @@ -352,6 +365,7 @@ export class DiscordBot extends EventTarget { username, text, channelId, // if there is no channelId, it's a DM + messageId, // XXX discord channel/dm distinction can be made more explicit with a type: string field... } = e.data; @@ -367,6 +381,7 @@ export class DiscordBot extends EventTarget { method: 'say', args: { text, + messageId, }, }; const id = getIdFromUserId(userId); diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/discord.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/discord.tsx index ba06c7629..412175e5d 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/discord.tsx +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/discord.tsx @@ -1,12 +1,16 @@ +import React from 'react'; import { useContext, useEffect } from 'react'; -import { useAgent, useAuthToken, useConversation } from 'react-agents'; +import { Action, ConversationProvider, useAgent, useAuthToken, useConversation } from 'react-agents'; import type { DiscordArgs, DiscordProps, + PendingActionEvent, } from '../../types'; import { AppContext, } from '../../context'; +import dedent from 'dedent'; +import { z } from 'zod'; export const Discord: React.FC = (props: DiscordProps) => { const { @@ -45,5 +49,53 @@ export const Discord: React.FC = (props: DiscordProps) => { conversation, ]); - return null; + return ( + <> + + '. + + Ensure the response is contextually relevant to the message being referenced or replied to. + `} + schema={ + z.object({ + messageReference: z.string(), + content: z.string(), + }) + } + examples={[ + { + messageReference: '1234567890', + content: 'Yes, I understand your point.', + }, + ]} + handler={ + async (e: PendingActionEvent) => { + const { + message, + agent, + } = e.data; + + const { + messageReference, + content, + } = message.args; + + const replyMessage = { + content: content, + reply: { + messageReference: messageReference, + } + } + await agent.say(replyMessage); + } + } + /> + + + ); }; \ No newline at end of file