forked from lavina/lavina
1
0
Fork 0

irc: handle repeated joins correctly

This commit is contained in:
Nikita Vilunov 2024-05-25 12:40:58 +02:00
parent 580923814b
commit bce8b332d2
1 changed files with 22 additions and 14 deletions

View File

@ -894,24 +894,32 @@ async fn handle_join(
match chan { match chan {
Chan::Global(chan_name) => { Chan::Global(chan_name) => {
let room_id = RoomId::from(chan_name.clone())?; let room_id = RoomId::from(chan_name.clone())?;
if let JoinResult::Success(room_info) = user_handle.join_room(room_id).await? { match user_handle.join_room(room_id).await? {
produce_on_join_cmd_messages(&config, &user, chan, &room_info, writer).await?; JoinResult::Success(room_info) => {
} else { produce_on_join_cmd_messages(&config, &user, chan, &room_info, writer).await?;
ServerMessage { }
tags: vec![], JoinResult::AlreadyJoined => {
sender: Some(config.server_name.clone()), // we do nothing on repeated joins
body: ServerMessageBody::N474BannedFromChan { }
client: user.nickname.clone(), JoinResult::Banned => {
chan: chan.clone(), ServerMessage {
message: "U dun goofed".into(), tags: vec![],
}, sender: Some(config.server_name.clone()),
body: ServerMessageBody::N474BannedFromChan {
client: user.nickname.clone(),
chan: chan.clone(),
message: "U dun goofed".into(),
},
}
.write_async(writer)
.await?;
} }
.write_async(writer)
.await?;
} }
writer.flush().await?; writer.flush().await?;
} }
Chan::Local(_) => {} Chan::Local(_) => {
// TODO handle join attempts to local chans with an error, we don't support these
}
}; };
Ok(()) Ok(())
} }