(client, guildId, messageId, emoji)
| 252 | } |
| 253 | |
| 254 | export async function removeReactionRole(client, guildId, messageId, emoji) { |
| 255 | try { |
| 256 | validateGuildId(guildId); |
| 257 | validateMessageId(messageId); |
| 258 | |
| 259 | const key = `reaction_roles:${guildId}:${messageId}`; |
| 260 | const data = await getReactionRoleMessage(client, guildId, messageId); |
| 261 | |
| 262 | if (!data || !data.roles[emoji]) { |
| 263 | return false; |
| 264 | } |
| 265 | |
| 266 | delete data.roles[emoji]; |
| 267 | |
| 268 | if (Object.keys(data.roles).length === 0) { |
| 269 | await client.db.delete(key); |
| 270 | logger.info(`Removed last reaction role from message ${messageId}, deleted message data`); |
| 271 | } else { |
| 272 | await client.db.set(key, data); |
| 273 | logger.info(`Removed reaction role for emoji ${emoji} from message ${messageId}`); |
| 274 | } |
| 275 | |
| 276 | return true; |
| 277 | } catch (error) { |
| 278 | if (error.name === 'TitanBotError') { |
| 279 | throw error; |
| 280 | } |
| 281 | logger.error(`Error removing reaction role in guild ${guildId}:`, error); |
| 282 | throw createError( |
| 283 | `Database error removing reaction role`, |
| 284 | ErrorTypes.DATABASE, |
| 285 | 'Failed to remove reaction role. Please try again.', |
| 286 | { guildId, messageId, originalError: error.message } |
| 287 | ); |
| 288 | } |
| 289 | } |
| 290 | |
| 291 | export async function getAllReactionRoleMessages(client, guildId) { |
| 292 | try { |
nothing calls this directly
no test coverage detected