nicknamemohaji / ft_irc

42cursus irc
0 stars 0 forks source link

TOPIC Command flow #9

Closed alsksssass closed 1 month ago

alsksssass commented 2 months ago

IRC TOPIC 명령어 코딩 시나리오

목적

IRC 프로토콜의 TOPIC 명령어를 구현하여 채널의 토픽을 출력하거나 변경할 수 있도록 합니다.

명령어 형식

실행 순서

  1. 명령어 파싱
  2. 파라미터 개수 확인
    • 파라미터가 없는 경우: ERR_NEEDMOREPARAMS (461) 에러 발생
  3. 채널 존재 여부 확인
    • 존재하지 않는 경우: ERR_NOSUCHCHANNEL (403) 에러 발생

파라미터가 1개일 경우 (토픽 조회)

  1. 사용자가 채널에 있는지 확인
    • 채널에 없는 경우: ERR_NOTONCHANNEL (442) 에러 발생
  2. 채널에 있는 경우:
    • 토픽과 토픽 수정 시간 출력

파라미터가 2개일 경우 (토픽 변경)

  1. 채널 모드 확인
    • 't' 모드가 아닌 경우: 진행
    • 't' 모드인 경우: 사용자 권한 확인
      • 권한이 없는 경우: ERR_CHANOPRIVSNEEDED (482) 에러 발생
  2. 토픽 변경 및 수정 시간 업데이트
  3. 변경된 토픽 출력(채널에 있는 모든 유저에게)
    • 토픽이 있는 경우: RPL_TOPIC (332) + RPL_TOPICWHOTIME (333) 출력
    • 토픽이 공백인 경우: RPL_NOTOPIC (331) 출력

에러 처리

필요한 메소드

class Channel { public: bool IsTopicRestricted() const; bool UserHasTopicPrivilege; // ... }; 소민씨와 협의 !

구현 시 고려사항

  1. 토픽 길이 제한 설정
  2. 토픽 변경 로그 기록 (누가 변경했는지 기록해야하는가?)

메시지 형식

테스트 계획

  1. 파라미터 없는 TOPIC 명령 테스트
  2. 존재하지 않는 채널에 대한 TOPIC 명령 테스트
  3. 채널에 속하지 않은 사용자의 토픽 조회 테스트
  4. 일반 사용자의 토픽 조회 테스트
  5. 't' 모드에서 권한 없는 사용자의 토픽 변경 시도 테스트
  6. 권한 있는 사용자의 토픽 변경 테스트
  7. 공백 토픽 설정 테스트
  8. 긴 토픽 설정 테스트 (길이 제한 확인)