mirror of
https://github.com/cinnyapp/cinny.git
synced 2025-11-11 09:40:28 +03:00
add creation handling for calls by setting creation content type
This commit is contained in:
parent
40a25aa03e
commit
0fb5ffc68a
1 changed files with 78 additions and 33 deletions
|
|
@ -56,7 +56,10 @@ function guessDMRoomTargetId(room, myUserId) {
|
||||||
room.getJoinedMembers().forEach((member) => {
|
room.getJoinedMembers().forEach((member) => {
|
||||||
if (member.userId === myUserId) return;
|
if (member.userId === myUserId) return;
|
||||||
|
|
||||||
if (typeof oldestMemberTs === 'undefined' || (member.events.member && member.events.member.getTs() < oldestMemberTs)) {
|
if (
|
||||||
|
typeof oldestMemberTs === 'undefined' ||
|
||||||
|
(member.events.member && member.events.member.getTs() < oldestMemberTs)
|
||||||
|
) {
|
||||||
oldestMember = member;
|
oldestMember = member;
|
||||||
oldestMemberTs = member.events.member.getTs();
|
oldestMemberTs = member.events.member.getTs();
|
||||||
}
|
}
|
||||||
|
|
@ -64,14 +67,21 @@ function guessDMRoomTargetId(room, myUserId) {
|
||||||
if (oldestMember) return oldestMember.userId;
|
if (oldestMember) return oldestMember.userId;
|
||||||
|
|
||||||
// if there are no joined members other than us, use the oldest member
|
// if there are no joined members other than us, use the oldest member
|
||||||
room.getLiveTimeline().getState(EventTimeline.FORWARDS)?.getMembers().forEach((member) => {
|
room
|
||||||
if (member.userId === myUserId) return;
|
.getLiveTimeline()
|
||||||
|
.getState(EventTimeline.FORWARDS)
|
||||||
|
?.getMembers()
|
||||||
|
.forEach((member) => {
|
||||||
|
if (member.userId === myUserId) return;
|
||||||
|
|
||||||
if (typeof oldestMemberTs === 'undefined' || (member.events.member && member.events.member.getTs() < oldestMemberTs)) {
|
if (
|
||||||
oldestMember = member;
|
typeof oldestMemberTs === 'undefined' ||
|
||||||
oldestMemberTs = member.events.member.getTs();
|
(member.events.member && member.events.member.getTs() < oldestMemberTs)
|
||||||
}
|
) {
|
||||||
});
|
oldestMember = member;
|
||||||
|
oldestMemberTs = member.events.member.getTs();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
if (typeof oldestMember === 'undefined') return myUserId;
|
if (typeof oldestMember === 'undefined') return myUserId;
|
||||||
return oldestMember.userId;
|
return oldestMember.userId;
|
||||||
|
|
@ -117,7 +127,13 @@ async function create(mx, options, isDM = false) {
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
const errcodes = ['M_UNKNOWN', 'M_BAD_JSON', 'M_ROOM_IN_USE', 'M_INVALID_ROOM_STATE', 'M_UNSUPPORTED_ROOM_VERSION'];
|
const errcodes = [
|
||||||
|
'M_UNKNOWN',
|
||||||
|
'M_BAD_JSON',
|
||||||
|
'M_ROOM_IN_USE',
|
||||||
|
'M_INVALID_ROOM_STATE',
|
||||||
|
'M_UNSUPPORTED_ROOM_VERSION',
|
||||||
|
];
|
||||||
if (errcodes.includes(e.errcode)) {
|
if (errcodes.includes(e.errcode)) {
|
||||||
throw new Error(e);
|
throw new Error(e);
|
||||||
}
|
}
|
||||||
|
|
@ -149,7 +165,7 @@ async function createDM(mx, userIdOrIds, isEncrypted = true) {
|
||||||
|
|
||||||
async function createRoom(mx, opts) {
|
async function createRoom(mx, opts) {
|
||||||
// joinRule: 'public' | 'invite' | 'restricted'
|
// joinRule: 'public' | 'invite' | 'restricted'
|
||||||
const { name, topic, joinRule } = opts;
|
const { name, roomType, topic, joinRule } = opts;
|
||||||
const alias = opts.alias ?? undefined;
|
const alias = opts.alias ?? undefined;
|
||||||
const parentId = opts.parentId ?? undefined;
|
const parentId = opts.parentId ?? undefined;
|
||||||
const isSpace = opts.isSpace ?? false;
|
const isSpace = opts.isSpace ?? false;
|
||||||
|
|
@ -161,12 +177,16 @@ async function createRoom(mx, opts) {
|
||||||
const options = {
|
const options = {
|
||||||
creation_content: undefined,
|
creation_content: undefined,
|
||||||
name,
|
name,
|
||||||
|
roomType,
|
||||||
topic,
|
topic,
|
||||||
visibility,
|
visibility,
|
||||||
room_alias_name: alias,
|
room_alias_name: alias,
|
||||||
initial_state: [],
|
initial_state: [],
|
||||||
power_level_content_override: undefined,
|
power_level_content_override: undefined,
|
||||||
};
|
};
|
||||||
|
if (roomType) {
|
||||||
|
options.creation_content = { type: 'org.matrix.msc3417.call' };
|
||||||
|
}
|
||||||
if (isSpace) {
|
if (isSpace) {
|
||||||
options.creation_content = { type: 'm.space' };
|
options.creation_content = { type: 'm.space' };
|
||||||
}
|
}
|
||||||
|
|
@ -211,10 +231,12 @@ async function createRoom(mx, opts) {
|
||||||
type: 'm.room.join_rules',
|
type: 'm.room.join_rules',
|
||||||
content: {
|
content: {
|
||||||
join_rule: 'restricted',
|
join_rule: 'restricted',
|
||||||
allow: [{
|
allow: [
|
||||||
type: 'm.room_membership',
|
{
|
||||||
room_id: parentId,
|
type: 'm.room_membership',
|
||||||
}],
|
room_id: parentId,
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -222,18 +244,22 @@ async function createRoom(mx, opts) {
|
||||||
const result = await create(mx, options);
|
const result = await create(mx, options);
|
||||||
|
|
||||||
if (parentId) {
|
if (parentId) {
|
||||||
await mx.sendStateEvent(parentId, 'm.space.child', {
|
await mx.sendStateEvent(
|
||||||
auto_join: false,
|
parentId,
|
||||||
suggested: false,
|
'm.space.child',
|
||||||
via: [getIdServer(mx.getUserId())],
|
{
|
||||||
}, result.room_id);
|
auto_join: false,
|
||||||
|
suggested: false,
|
||||||
|
via: [getIdServer(mx.getUserId())],
|
||||||
|
},
|
||||||
|
result.room_id
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function ignore(mx, userIds) {
|
async function ignore(mx, userIds) {
|
||||||
|
|
||||||
let ignoredUsers = mx.getIgnoredUsers().concat(userIds);
|
let ignoredUsers = mx.getIgnoredUsers().concat(userIds);
|
||||||
ignoredUsers = [...new Set(ignoredUsers)];
|
ignoredUsers = [...new Set(ignoredUsers)];
|
||||||
await mx.setIgnoredUsers(ignoredUsers);
|
await mx.setIgnoredUsers(ignoredUsers);
|
||||||
|
|
@ -251,32 +277,51 @@ async function setPowerLevel(mx, roomId, userId, powerLevel) {
|
||||||
|
|
||||||
async function setMyRoomNick(mx, roomId, nick) {
|
async function setMyRoomNick(mx, roomId, nick) {
|
||||||
const room = mx.getRoom(roomId);
|
const room = mx.getRoom(roomId);
|
||||||
const mEvent = room.getLiveTimeline().getState(EventTimeline.FORWARDS).getStateEvents('m.room.member', mx.getUserId());
|
const mEvent = room
|
||||||
|
.getLiveTimeline()
|
||||||
|
.getState(EventTimeline.FORWARDS)
|
||||||
|
.getStateEvents('m.room.member', mx.getUserId());
|
||||||
const content = mEvent?.getContent();
|
const content = mEvent?.getContent();
|
||||||
if (!content) return;
|
if (!content) return;
|
||||||
await mx.sendStateEvent(roomId, 'm.room.member', {
|
await mx.sendStateEvent(
|
||||||
...content,
|
roomId,
|
||||||
displayname: nick,
|
'm.room.member',
|
||||||
}, mx.getUserId());
|
{
|
||||||
|
...content,
|
||||||
|
displayname: nick,
|
||||||
|
},
|
||||||
|
mx.getUserId()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function setMyRoomAvatar(mx, roomId, mxc) {
|
async function setMyRoomAvatar(mx, roomId, mxc) {
|
||||||
const room = mx.getRoom(roomId);
|
const room = mx.getRoom(roomId);
|
||||||
const mEvent = room.getLiveTimeline().getState(EventTimeline.FORWARDS).getStateEvents('m.room.member', mx.getUserId());
|
const mEvent = room
|
||||||
|
.getLiveTimeline()
|
||||||
|
.getState(EventTimeline.FORWARDS)
|
||||||
|
.getStateEvents('m.room.member', mx.getUserId());
|
||||||
const content = mEvent?.getContent();
|
const content = mEvent?.getContent();
|
||||||
if (!content) return;
|
if (!content) return;
|
||||||
await mx.sendStateEvent(roomId, 'm.room.member', {
|
await mx.sendStateEvent(
|
||||||
...content,
|
roomId,
|
||||||
avatar_url: mxc,
|
'm.room.member',
|
||||||
}, mx.getUserId());
|
{
|
||||||
|
...content,
|
||||||
|
avatar_url: mxc,
|
||||||
|
},
|
||||||
|
mx.getUserId()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export {
|
export {
|
||||||
convertToDm,
|
convertToDm,
|
||||||
convertToRoom,
|
convertToRoom,
|
||||||
join,
|
join,
|
||||||
createDM, createRoom,
|
createDM,
|
||||||
ignore, unignore,
|
createRoom,
|
||||||
|
ignore,
|
||||||
|
unignore,
|
||||||
setPowerLevel,
|
setPowerLevel,
|
||||||
setMyRoomNick, setMyRoomAvatar,
|
setMyRoomNick,
|
||||||
|
setMyRoomAvatar,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue