forked from cadence/out-of-your-element
		
	Preserve name/avatar/topic of linked rooms
This commit is contained in:
		
							parent
							
								
									438714b67e
								
							
						
					
					
						commit
						ed417e029f
					
				
					 2 changed files with 7 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -164,8 +164,11 @@ as.router.post("/api/link", defineEventHandler(async event => {
 | 
			
		|||
	const selfPowerLevel = powerLevelsStateContent?.users?.[me] || powerLevelsStateContent?.users_default || 0
 | 
			
		||||
	if (selfPowerLevel < (powerLevelsStateContent?.state_default || 50) || selfPowerLevel < 100) throw createError({status: 400, message: "Bad Request", data: "OOYE needs power level 100 (admin) in the target Matrix room"})
 | 
			
		||||
 | 
			
		||||
	// Insert database entry
 | 
			
		||||
	db.prepare("INSERT INTO channel_room (channel_id, room_id, name, guild_id) VALUES (?, ?, ?, ?)").run(channel.id, parsedBody.matrix, channel.name, guildID)
 | 
			
		||||
	// Insert database entry, but keep the room's existing properties if they are set
 | 
			
		||||
	const nick = await api.getStateEvent(parsedBody.matrix, "m.room.name", "").then(content => content.name || null).catch(() => null)
 | 
			
		||||
	const avatar = await api.getStateEvent(parsedBody.matrix, "m.room.avatar", "").then(content => content.url || null).catch(() => null)
 | 
			
		||||
	const topic = await api.getStateEvent(parsedBody.matrix, "m.room.topic", "").then(content => content.topic || null).catch(() => null)
 | 
			
		||||
	db.prepare("INSERT INTO channel_room (channel_id, room_id, name, guild_id, nick, custom_avatar, custom_topic) VALUES (?, ?, ?, ?, ?, ?, ?)").run(channel.id, parsedBody.matrix, channel.name, guildID, nick, avatar, topic)
 | 
			
		||||
 | 
			
		||||
	// Sync room data and space child
 | 
			
		||||
	await createRoom.syncRoom(parsedBody.discord)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -508,12 +508,13 @@ test("web link room: successfully calls createRoom", async t => {
 | 
			
		|||
				return roomID
 | 
			
		||||
			},
 | 
			
		||||
			async getStateEvent(roomID, type, key) {
 | 
			
		||||
				called++
 | 
			
		||||
				if (type === "m.room.power_levels") {
 | 
			
		||||
					called++
 | 
			
		||||
					t.equal(roomID, "!NDbIqNpJyPvfKRnNcr:cadence.moe")
 | 
			
		||||
					t.equal(key, "")
 | 
			
		||||
					return {users: {"@_ooye_bot:cadence.moe": 100}}
 | 
			
		||||
				} else if (type === "m.space.child") {
 | 
			
		||||
					called++
 | 
			
		||||
					t.equal(roomID, "!zTMspHVUBhFLLSdmnS:cadence.moe")
 | 
			
		||||
					t.equal(key, "!NDbIqNpJyPvfKRnNcr:cadence.moe")
 | 
			
		||||
					return {via: ["cadence.moe"]}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue