You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

nickname.go 1.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package irc
  2. type NickCommand struct {
  3. BaseCommand
  4. nickname Name
  5. }
  6. func (m *NickCommand) HandleRegServer(s *Server) {
  7. client := m.Client()
  8. if !client.authorized {
  9. client.ErrPasswdMismatch()
  10. client.Quit("bad password")
  11. return
  12. }
  13. if client.capState == CapNegotiating {
  14. client.capState = CapNegotiated
  15. }
  16. if m.nickname == "" {
  17. client.ErrNoNicknameGiven()
  18. return
  19. }
  20. if s.clients.Get(m.nickname) != nil {
  21. client.ErrNickNameInUse(m.nickname)
  22. return
  23. }
  24. if !m.nickname.IsNickname() {
  25. client.ErrErroneusNickname(m.nickname)
  26. return
  27. }
  28. client.SetNickname(m.nickname)
  29. s.tryRegister(client)
  30. }
  31. func (msg *NickCommand) HandleServer(server *Server) {
  32. client := msg.Client()
  33. if msg.nickname == "" {
  34. client.ErrNoNicknameGiven()
  35. return
  36. }
  37. if !msg.nickname.IsNickname() {
  38. client.ErrErroneusNickname(msg.nickname)
  39. return
  40. }
  41. if msg.nickname == client.nick {
  42. return
  43. }
  44. target := server.clients.Get(msg.nickname)
  45. if (target != nil) && (target != client) {
  46. client.ErrNickNameInUse(msg.nickname)
  47. return
  48. }
  49. client.ChangeNickname(msg.nickname)
  50. }
  51. type OperNickCommand struct {
  52. BaseCommand
  53. target Name
  54. nick Name
  55. }
  56. func (msg *OperNickCommand) HandleServer(server *Server) {
  57. client := msg.Client()
  58. if !client.flags[Operator] {
  59. client.ErrNoPrivileges()
  60. return
  61. }
  62. if !msg.nick.IsNickname() {
  63. client.ErrErroneusNickname(msg.nick)
  64. return
  65. }
  66. if msg.nick == client.nick {
  67. return
  68. }
  69. target := server.clients.Get(msg.target)
  70. if target == nil {
  71. client.ErrNoSuchNick(msg.target)
  72. return
  73. }
  74. if server.clients.Get(msg.nick) != nil {
  75. client.ErrNickNameInUse(msg.nick)
  76. return
  77. }
  78. target.ChangeNickname(msg.nick)
  79. }