Slow mode WIP (#192):

* default delay is configurable in channel's chat rooms options.
This commit is contained in:
John Livingston
2024-02-13 12:49:22 +01:00
parent ee71d3f729
commit cf179d7f72
11 changed files with 91 additions and 3 deletions

View File

@ -23,6 +23,11 @@ async function sanitizeChannelConfigurationOptions (
throw new Error('Invalid data.bot data type')
}
const slowModeData = data.slowMode ?? { defaultDelay: 0 } // not present in livechat <= 8.2.0
if (typeof slowModeData !== 'object') {
throw new Error('Invalid data.slowMode data type')
}
const result: ChannelConfigurationOptions = {
bot: {
enabled: _readBoolean(botData, 'enabled'),
@ -31,6 +36,9 @@ async function sanitizeChannelConfigurationOptions (
quotes: _readQuotes(botData),
commands: _readCommands(botData)
// TODO: bannedJIDs
},
slowMode: {
defaultDelay: _readInteger(slowModeData, 'defaultDelay', 0, 1000)
}
}

View File

@ -24,7 +24,7 @@ async function getChannelConfigurationOptions (
const logger = options.peertubeHelpers.logger
const filePath = _getFilePath(options, channelId)
if (!fs.existsSync(filePath)) {
logger.debug('No stored data for channel, returning default values')
logger.debug('No stored data for channel, returning null')
return null
}
const content = await fs.promises.readFile(filePath, {
@ -42,6 +42,9 @@ function getDefaultChannelConfigurationOptions (_options: RegisterServerOptions)
forbiddenWords: [],
quotes: [],
commands: []
},
slowMode: {
defaultDelay: 0
}
}
}

View File

@ -7,6 +7,10 @@ import { Affiliations, getVideoAffiliations, getChannelAffiliations } from '../.
import { fillVideoCustomFields } from '../../custom-fields'
import { getChannelInfosById } from '../../database/channel'
import { RoomChannel } from '../../room-channel'
import {
getChannelConfigurationOptions,
getDefaultChannelConfigurationOptions
} from '../../configuration/channel/storage'
// See here for description: https://modules.prosody.im/mod_muc_http_defaults.html
interface RoomDefaults {
@ -25,10 +29,19 @@ interface RoomDefaults {
// historylength: number
moderated?: boolean
archiving?: boolean
// Following fields are specific to livechat (for now), and requires a customized version for mod_muc_http_defaults.
slow_mode_delay?: number
}
affiliations?: Affiliations
}
async function defaultSlowModeDelay (options: RegisterServerOptions, channelId: number): Promise<number> {
const channelOptions = await getChannelConfigurationOptions(options, channelId) ??
getDefaultChannelConfigurationOptions(options)
return channelOptions.slowMode.defaultDelay
}
/**
* Instanciate the route for room APIs.
* These APIs are used by Prosody to get room defaults from the Peertube server.
@ -74,8 +87,9 @@ async function initRoomApiRouter (options: RegisterServerOptions, router: Router
const roomDefaults: RoomDefaults = {
config: {
name: channelInfos.displayName,
description: ''
description: '',
// subject: channelInfos.displayName
slow_mode_delay: await defaultSlowModeDelay(options, channelId)
},
affiliations: affiliations
}
@ -126,8 +140,9 @@ async function initRoomApiRouter (options: RegisterServerOptions, router: Router
config: {
name: video.name,
description: '',
language: video.language
language: video.language,
// subject: video.name
slow_mode_delay: await defaultSlowModeDelay(options, video.channelId)
},
affiliations: affiliations
}