Spaces:
Sleeping
Sleeping
import { v } from 'convex/values'; | |
import { mutation, query } from './_generated/server'; | |
import { insertInput } from './aiTown/insertInput'; | |
import { conversationId, playerId } from './aiTown/ids'; | |
export const listMessages = query({ | |
args: { | |
worldId: v.id('worlds'), | |
conversationId, | |
}, | |
handler: async (ctx, args) => { | |
const messages = await ctx.db | |
.query('messages') | |
.withIndex('conversationId', (q) => q.eq('worldId', args.worldId).eq('conversationId', args.conversationId)) | |
.collect(); | |
const out = []; | |
for (const message of messages) { | |
const playerDescription = await ctx.db | |
.query('playerDescriptions') | |
.withIndex('worldId', (q) => q.eq('worldId', args.worldId).eq('playerId', message.author)) | |
.first(); | |
if (!playerDescription) { | |
throw new Error(`Invalid author ID: ${message.author}`); | |
} | |
out.push({ ...message, authorName: playerDescription.name }); | |
} | |
return out; | |
}, | |
}); | |
export const writeMessage = mutation({ | |
args: { | |
worldId: v.id('worlds'), | |
conversationId, | |
messageUuid: v.string(), | |
playerId, | |
text: v.string(), | |
}, | |
handler: async (ctx, args) => { | |
await ctx.db.insert('messages', { | |
conversationId: args.conversationId, | |
author: args.playerId, | |
messageUuid: args.messageUuid, | |
text: args.text, | |
worldId: args.worldId, | |
}); | |
await insertInput(ctx, args.worldId, 'finishSendingMessage', { | |
conversationId: args.conversationId, | |
playerId: args.playerId, | |
timestamp: Date.now(), | |
}); | |
}, | |
}); | |