|
@@ -28,28 +28,57 @@ var (
|
28
|
28
|
)
|
29
|
29
|
|
30
|
30
|
func performNickChange(server *Server, client *Client, target *Client, session *Session, nickname string, rb *ResponseBuffer) error {
|
31
|
|
- currentNick := client.Nick()
|
32
|
31
|
details := target.Details()
|
33
|
32
|
hadNick := details.nick != "*"
|
34
|
33
|
origNickMask := details.nickMask
|
|
34
|
+ isSanick := client != target
|
35
|
35
|
|
36
|
36
|
assignedNickname, err, back := client.server.clients.SetNick(target, session, nickname)
|
37
|
37
|
if err == errNicknameInUse {
|
38
|
|
- rb.Add(nil, server.name, ERR_NICKNAMEINUSE, currentNick, utils.SafeErrorParam(nickname), client.t("Nickname is already in use"))
|
|
38
|
+ if !isSanick {
|
|
39
|
+ rb.Add(nil, server.name, ERR_NICKNAMEINUSE, details.nick, utils.SafeErrorParam(nickname), client.t("Nickname is already in use"))
|
|
40
|
+ } else {
|
|
41
|
+ rb.Add(nil, server.name, "FAIL", "SANICK", "NICKNAME_IN_USE", utils.SafeErrorParam(nickname), client.t("Nickname is already in use"))
|
|
42
|
+ }
|
39
|
43
|
} else if err == errNicknameReserved {
|
40
|
|
- rb.Add(nil, server.name, ERR_NICKNAMEINUSE, currentNick, utils.SafeErrorParam(nickname), client.t("Nickname is reserved by a different account"))
|
|
44
|
+ if !isSanick {
|
|
45
|
+ rb.Add(nil, server.name, ERR_NICKNAMEINUSE, details.nick, utils.SafeErrorParam(nickname), client.t("Nickname is reserved by a different account"))
|
|
46
|
+ } else {
|
|
47
|
+ rb.Add(nil, server.name, "FAIL", "SANICK", "NICKNAME_RESERVED", utils.SafeErrorParam(nickname), client.t("Nickname is reserved by a different account"))
|
|
48
|
+ }
|
41
|
49
|
} else if err == errNicknameInvalid {
|
42
|
|
- rb.Add(nil, server.name, ERR_ERRONEUSNICKNAME, currentNick, utils.SafeErrorParam(nickname), client.t("Erroneous nickname"))
|
|
50
|
+ if !isSanick {
|
|
51
|
+ rb.Add(nil, server.name, ERR_ERRONEUSNICKNAME, details.nick, utils.SafeErrorParam(nickname), client.t("Erroneous nickname"))
|
|
52
|
+ } else {
|
|
53
|
+ rb.Add(nil, server.name, "FAIL", "SANICK", "NICKNAME_INVALID", utils.SafeErrorParam(nickname), client.t("Erroneous nickname"))
|
|
54
|
+ }
|
43
|
55
|
} else if err == errNickAccountMismatch {
|
44
|
56
|
// this used to use ERR_NICKNAMEINUSE, but it displayed poorly in some clients;
|
45
|
57
|
// ERR_UNKNOWNERROR at least has a better chance of displaying our error text
|
46
|
|
- rb.Add(nil, server.name, ERR_UNKNOWNERROR, currentNick, "NICK", client.t("You must use your account name as your nickname"))
|
|
58
|
+ if !isSanick {
|
|
59
|
+ rb.Add(nil, server.name, ERR_UNKNOWNERROR, details.nick, "NICK", client.t("You must use your account name as your nickname"))
|
|
60
|
+ } else {
|
|
61
|
+ rb.Add(nil, server.name, "FAIL", "SANICK", "UNKNOWN_ERROR", utils.SafeErrorParam(nickname), client.t("This user's nickname and account name need to be equal"))
|
|
62
|
+ }
|
47
|
63
|
} else if err == errNickMissing {
|
48
|
|
- rb.Add(nil, server.name, ERR_NONICKNAMEGIVEN, currentNick, client.t("No nickname given"))
|
|
64
|
+ if !isSanick {
|
|
65
|
+ rb.Add(nil, server.name, ERR_NONICKNAMEGIVEN, details.nick, client.t("No nickname given"))
|
|
66
|
+ } else {
|
|
67
|
+ rb.Add(nil, server.name, "FAIL", "SANICK", "NICKNAME_INVALID", utils.SafeErrorParam(nickname), client.t("No nickname given"))
|
|
68
|
+ }
|
49
|
69
|
} else if err == errNoop {
|
50
|
|
- // no message
|
|
70
|
+ if !isSanick {
|
|
71
|
+ // no message
|
|
72
|
+ } else {
|
|
73
|
+ rb.Add(nil, server.name, "NOTE", "SANICK", "NOOP", utils.SafeErrorParam(nickname), client.t("Client already had the desired nickname"))
|
|
74
|
+ }
|
51
|
75
|
} else if err != nil {
|
52
|
|
- rb.Add(nil, server.name, ERR_UNKNOWNERROR, currentNick, "NICK", fmt.Sprintf(client.t("Could not set or change nickname: %s"), err.Error()))
|
|
76
|
+ client.server.logger.Error("internal", "couldn't change nick", nickname, err.Error())
|
|
77
|
+ if !isSanick {
|
|
78
|
+ rb.Add(nil, server.name, ERR_UNKNOWNERROR, details.nick, "NICK", client.t("Could not set or change nickname"))
|
|
79
|
+ } else {
|
|
80
|
+ rb.Add(nil, server.name, "FAIL", "SANICK", "UNKNOWN_ERROR", utils.SafeErrorParam(nickname), client.t("Could not set or change nickname"))
|
|
81
|
+ }
|
53
|
82
|
}
|
54
|
83
|
if err != nil {
|
55
|
84
|
return err
|