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 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)
|
||||
spacePowerDetails.powerLevels.users ??= {}
|
||||
@@ -159,7 +163,8 @@ async function channelToKState(channel, guild, di) {
|
||||
events_default: everyoneCanSend ? 0 : READ_ONLY_ROOM_EVENTS_DEFAULT_POWER,
|
||||
events: {
|
||||
"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: {
|
||||
room: everyoneCanMentionEveryone ? 0 : 20
|
||||
|
||||
@@ -182,6 +182,10 @@ function memberToPowerLevel(user, member, guild, channel) {
|
||||
const everyoneCanMentionEveryone = dUtils.hasPermission(everyonePermissions, DiscordTypes.PermissionFlagsBits.MentionEveryone)
|
||||
const userCanMentionEveryone = dUtils.hasPermission(permissions, DiscordTypes.PermissionFlagsBits.MentionEveryone)
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
@@ -196,6 +196,21 @@ module.exports = {
|
||||
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 {DiscordTypes.GatewayChannelUpdateDispatchData} channelOrThread
|
||||
|
||||
Reference in New Issue
Block a user