Sync create polls permission from Discord
This commit is contained in:
@@ -124,7 +124,11 @@ async function channelToKState(channel, guild, di) {
|
|||||||
|
|
||||||
const everyonePermissions = dUtils.getPermissions(guild.id, [], guild.roles, undefined, channel.permission_overwrites)
|
const everyonePermissions = dUtils.getPermissions(guild.id, [], guild.roles, undefined, channel.permission_overwrites)
|
||||||
const everyoneCanSend = dUtils.hasPermission(everyonePermissions, DiscordTypes.PermissionFlagsBits.SendMessages)
|
const everyoneCanSend = dUtils.hasPermission(everyonePermissions, DiscordTypes.PermissionFlagsBits.SendMessages)
|
||||||
const everyoneCanMentionEveryone = dUtils.hasAllPermissions(everyonePermissions, ["MentionEveryone"])
|
const everyoneCanMentionEveryone = dUtils.hasPermission(everyonePermissions, DiscordTypes.PermissionFlagsBits.MentionEveryone)
|
||||||
|
|
||||||
|
const pollStartPowerLevel = {}
|
||||||
|
const everyoneCanCreatePolls = dUtils.hasPermission(everyonePermissions, DiscordTypes.PermissionFlagsBits.SendPolls)
|
||||||
|
if (everyoneCanSend && !everyoneCanCreatePolls) pollStartPowerLevel["org.matrix.msc3381.poll.start"] = 10
|
||||||
|
|
||||||
const spacePowerDetails = await mUtils.getEffectivePower(guildSpaceID, [], di.api)
|
const spacePowerDetails = await mUtils.getEffectivePower(guildSpaceID, [], di.api)
|
||||||
spacePowerDetails.powerLevels.users ??= {}
|
spacePowerDetails.powerLevels.users ??= {}
|
||||||
@@ -159,7 +163,8 @@ async function channelToKState(channel, guild, di) {
|
|||||||
events_default: everyoneCanSend ? 0 : READ_ONLY_ROOM_EVENTS_DEFAULT_POWER,
|
events_default: everyoneCanSend ? 0 : READ_ONLY_ROOM_EVENTS_DEFAULT_POWER,
|
||||||
events: {
|
events: {
|
||||||
"m.reaction": 0,
|
"m.reaction": 0,
|
||||||
"m.room.redaction": 0 // only affects redactions of own events, required to be able to un-react
|
"m.room.redaction": 0, // only affects redactions of own events, required to be able to un-react
|
||||||
|
...pollStartPowerLevel
|
||||||
},
|
},
|
||||||
notifications: {
|
notifications: {
|
||||||
room: everyoneCanMentionEveryone ? 0 : 20
|
room: everyoneCanMentionEveryone ? 0 : 20
|
||||||
|
|||||||
@@ -182,6 +182,10 @@ function memberToPowerLevel(user, member, guild, channel) {
|
|||||||
const everyoneCanMentionEveryone = dUtils.hasPermission(everyonePermissions, DiscordTypes.PermissionFlagsBits.MentionEveryone)
|
const everyoneCanMentionEveryone = dUtils.hasPermission(everyonePermissions, DiscordTypes.PermissionFlagsBits.MentionEveryone)
|
||||||
const userCanMentionEveryone = dUtils.hasPermission(permissions, DiscordTypes.PermissionFlagsBits.MentionEveryone)
|
const userCanMentionEveryone = dUtils.hasPermission(permissions, DiscordTypes.PermissionFlagsBits.MentionEveryone)
|
||||||
if (!everyoneCanMentionEveryone && userCanMentionEveryone) return 20
|
if (!everyoneCanMentionEveryone && userCanMentionEveryone) return 20
|
||||||
|
/* PL 10 = Create Polls for technical reasons. */
|
||||||
|
const everyoneCanCreatePolls = dUtils.hasPermission(everyonePermissions, DiscordTypes.PermissionFlagsBits.SendPolls)
|
||||||
|
const userCanCreatePolls = dUtils.hasPermission(permissions, DiscordTypes.PermissionFlagsBits.SendPolls)
|
||||||
|
if (!everyoneCanCreatePolls && userCanCreatePolls) return 10
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -196,6 +196,21 @@ module.exports = {
|
|||||||
await createSpace.syncSpace(guild)
|
await createSpace.syncSpace(guild)
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {import("./discord-client")} client
|
||||||
|
* @param {DiscordTypes.GatewayGuildRoleUpdateDispatchData} data
|
||||||
|
*/
|
||||||
|
async GUILD_ROLE_UPDATE(client, data) {
|
||||||
|
const guild = client.guilds.get(data.guild_id)
|
||||||
|
if (!guild) return
|
||||||
|
const spaceID = select("guild_space", "space_id", {guild_id: data.guild_id}).pluck().get()
|
||||||
|
if (!spaceID) return
|
||||||
|
|
||||||
|
if (data.role.id === data.guild_id) { // @everyone role changed - find a way to do this more efficiently in the future to handle many role updates
|
||||||
|
await createSpace.syncSpaceFully(guild)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {import("./discord-client")} client
|
* @param {import("./discord-client")} client
|
||||||
* @param {DiscordTypes.GatewayChannelUpdateDispatchData} channelOrThread
|
* @param {DiscordTypes.GatewayChannelUpdateDispatchData} channelOrThread
|
||||||
|
|||||||
Reference in New Issue
Block a user