From 6ab8dbd19ea943cf152c0356be55bcdce15a2ad1ee0494e51766d1466eb4ece2 Mon Sep 17 00:00:00 2001 From: aslan Date: Mon, 29 Dec 2025 15:06:47 +0100 Subject: [PATCH] Add emote reactions --- package.json | 2 +- src/modules/ai/ai.ts | 2 ++ src/modules/module.ts | 4 +++- src/modules/types.ts | 1 + src/services/ai/tools.ts | 37 +++++++++++++++++++++++++++++++++++++ src/services/ai/types.ts | 1 + 6 files changed, 45 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 4c92f5f..e9c31da 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aslobot-matrix", - "version": "1.0.0", + "version": "1.1.0", "description": "", "license": "ISC", "author": "", diff --git a/src/modules/ai/ai.ts b/src/modules/ai/ai.ts index ede9900..0b7a132 100644 --- a/src/modules/ai/ai.ts +++ b/src/modules/ai/ai.ts @@ -32,6 +32,7 @@ const onAI = async ( text: string, roomId: string, sender: string, + eventId: string, repliedMessage?: string, repliedSender?: string, image?: Buffer, @@ -82,6 +83,7 @@ const onAI = async ( const responseAI = await getTextGemini( { client: client, + eventId: eventId, roomId: roomId, sender: sender, }, diff --git a/src/modules/module.ts b/src/modules/module.ts index 0514b93..2417b2d 100644 --- a/src/modules/module.ts +++ b/src/modules/module.ts @@ -76,7 +76,8 @@ const registerModules = (client: MatrixClient) => { const roomId = event.getRoomId(); const sender = event.getSender(); - if (!roomId || !sender) { + const eventId = event.getId(); + if (!roomId || !sender || !eventId) { return; } @@ -145,6 +146,7 @@ const registerModules = (client: MatrixClient) => { body.toString(), roomId, sender, + eventId, repliedMessage, repliedSender, image, diff --git a/src/modules/types.ts b/src/modules/types.ts index 1a6b04a..2ddd14d 100644 --- a/src/modules/types.ts +++ b/src/modules/types.ts @@ -13,6 +13,7 @@ interface ICallback { text: string, roomId: string, sender: string, + eventId: string, repliedMessage?: string, repliedSender?: string, image?: Buffer, diff --git a/src/services/ai/tools.ts b/src/services/ai/tools.ts index e2fbb5b..c871026 100644 --- a/src/services/ai/tools.ts +++ b/src/services/ai/tools.ts @@ -2,6 +2,7 @@ import type { FunctionDeclaration } from "@google/genai"; import { config, packageConfig } from "../../config.js"; import type { AIToolFunction } from "./types.js"; import { save, state } from "../../store/store.js"; +import { EventType, RelationType } from "matrix-js-sdk"; const tools: FunctionDeclaration[] = [ { @@ -27,6 +28,20 @@ const tools: FunctionDeclaration[] = [ required: ["password"], }, }, + { + name: "sendReaction", + description: "Sends an emoji reaction to user's message", + parametersJsonSchema: { + type: "object", + properties: { + emoji: { + type: "string", + description: "one emoji to react with (example: 😀)", + }, + }, + required: ["emoji"], + }, + }, { name: "remember", description: "Gets information about this AI bot", @@ -97,6 +112,28 @@ const toolFunctions: AIToolFunction[] = [ }; }, }, + { + name: "sendReaction", + function: async (matrix, args) => { + if (args.emoji) { + await matrix.client.sendEvent( + matrix.roomId, + EventType.Reaction, + { + "m.relates_to": { + rel_type: RelationType.Annotation, + event_id: matrix.eventId, + key: args.emoji, + }, + }, + ); + } + + return { + message: "success", + }; + }, + }, { name: "remember", function: (_matrix, args) => { diff --git a/src/services/ai/types.ts b/src/services/ai/types.ts index d5803d3..8551a2a 100644 --- a/src/services/ai/types.ts +++ b/src/services/ai/types.ts @@ -19,6 +19,7 @@ interface AIToolMatrixData { client: MatrixClient; roomId: string; sender: string; + eventId: string; } export {