Complete Classic telemetry, authenticated player replies and reversible cutover
Core tests / core (push) Successful in 27s
Core tests / core (push) Successful in 27s
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
export type ConversationChannel='say'|'whisper';
|
||||
|
||||
export type ConversationRequest={
|
||||
speakerGuid?:number;
|
||||
speakerAccountId?:number;
|
||||
socialTurn?:0|1|2|3;
|
||||
id:string;
|
||||
createdAt:string;
|
||||
@@ -16,6 +18,7 @@ export type ConversationRequest={
|
||||
};
|
||||
|
||||
async function ensure(db:D1Database){
|
||||
await db.prepare('CREATE TABLE IF NOT EXISTS conversation_identity (id TEXT PRIMARY KEY,guid INTEGER NOT NULL,account_id INTEGER NOT NULL)').run();
|
||||
await db.prepare(`CREATE TABLE IF NOT EXISTS conversation_requests (
|
||||
id TEXT PRIMARY KEY NOT NULL,
|
||||
created_at TEXT NOT NULL,
|
||||
@@ -68,6 +71,9 @@ export async function queueConversationEvent(db:D1Database,kind:string,payload:R
|
||||
text(payload,'selectedPlayer',40),
|
||||
text(payload,'nearbyBots',1000)
|
||||
).run();
|
||||
if(Number.isInteger(payload.characterGuid)&&Number(payload.characterGuid)>0&&Number.isInteger(payload.accountId)&&Number(payload.accountId)>0){
|
||||
await db.prepare('INSERT INTO conversation_identity VALUES (?,?,?)').bind(id,payload.characterGuid,payload.accountId).run();
|
||||
}
|
||||
return {id,createdAt};
|
||||
}
|
||||
|
||||
@@ -82,6 +88,7 @@ export async function leaseConversation(db:D1Database):Promise<ConversationReque
|
||||
const row=await db.prepare(`SELECT id,created_at,speaker_name,message,channel,zone_name,receiver,selected_player,nearby_bots,status,attempts
|
||||
FROM conversation_requests WHERE status='pending' ORDER BY CASE WHEN channel LIKE 'social-%' THEN 1 ELSE 0 END,created_at LIMIT 1`).first<any>();
|
||||
if(!row)return null;
|
||||
const identity=await db.prepare('SELECT guid,account_id FROM conversation_identity WHERE id=?').bind(row.id).first<{guid:number;account_id:number}>();
|
||||
|
||||
const startedAt=new Date().toISOString();
|
||||
const updated=await db.prepare(`UPDATE conversation_requests
|
||||
@@ -90,6 +97,7 @@ export async function leaseConversation(db:D1Database):Promise<ConversationReque
|
||||
if(updated.meta.changes!==1)return null;
|
||||
|
||||
return {
|
||||
speakerGuid:identity?.guid,speakerAccountId:identity?.account_id,
|
||||
socialTurn:row.channel==='social-start'?0:row.channel==='social-reply'?1:row.channel==='social-turn-2'?2:row.channel==='social-turn-3'?3:undefined,
|
||||
id:row.id,
|
||||
createdAt:row.created_at,
|
||||
|
||||
Reference in New Issue
Block a user