(&mut self, guild_id: Id<GuildMarker>)
| 165 | } |
| 166 | |
| 167 | async fn update_guild_commands(&mut self, guild_id: Id<GuildMarker>) -> Result<(), ()> { |
| 168 | let script_commands = self |
| 169 | .config_store |
| 170 | .get_enabled_script_command_contributes(guild_id) |
| 171 | .await |
| 172 | .map_err(|err| { |
| 173 | error!(%err, "failed retrieving guild script command contributes"); |
| 174 | })?; |
| 175 | |
| 176 | let merged = merge_script_commands(script_commands); |
| 177 | |
| 178 | let serialized = serde_json::to_string(&merged).unwrap(); |
| 179 | if let Some(current) = self.cached_commands.get(&guild_id) { |
| 180 | if current == &serialized { |
| 181 | self.guild_logger.log(LogEntry::info( |
| 182 | guild_id, |
| 183 | format!( |
| 184 | "skipped updating commands as there was no changes, top level commands: {}", |
| 185 | merged.len() |
| 186 | ), |
| 187 | )); |
| 188 | |
| 189 | return Ok(()); |
| 190 | } |
| 191 | } |
| 192 | |
| 193 | self.guild_logger.log(LogEntry::info( |
| 194 | guild_id, |
| 195 | format!( |
| 196 | "updating guild commands, top level commands: {}", |
| 197 | merged.len() |
| 198 | ), |
| 199 | )); |
| 200 | |
| 201 | let interaction_client = self.discord_config.interaction_client(); |
| 202 | |
| 203 | if let Err(err) = interaction_client |
| 204 | .set_guild_commands(guild_id, &merged) |
| 205 | .await |
| 206 | { |
| 207 | error!(%err, "failed updating guild commands"); |
| 208 | |
| 209 | self.guild_logger.log(LogEntry::error( |
| 210 | guild_id, |
| 211 | "failed updating guild commands".to_string(), |
| 212 | )); |
| 213 | // TODO: for now this returns an ok, in the future once we have |
| 214 | // more validation we could return an err here and have it retry |
| 215 | // (but not for client errors) |
| 216 | } |
| 217 | |
| 218 | self.cached_commands.insert(guild_id, serialized); |
| 219 | |
| 220 | Ok(()) |
| 221 | } |
| 222 | } |
| 223 | |
| 224 | static GROUP_DESC_PLACEHOLDER: &str = "no description"; |
no test coverage detected