public void JOIN(IMessage IMessage) { string[] channels = IMessage.Params[0].Split(','); string[] keys = null; if (IMessage.Params.Length == 2) { keys = IMessage.Params[1].Split(','); } foreach (string s in channels) { if (Database.GetDatabase().HasChannel(s)) { IChannel ch = Database.GetDatabase().GetChannel(s); int i = Array.IndexOf <string>(channels, s); if (ch.Modes.ContainsKey('k') && ch.Modes['k'] == keys[i]) { ch.AddClient(IMessage.Owner); } else if (!ch.Modes.ContainsKey('k')) { ch.AddClient(IMessage.Owner); } else { IMessage.Owner.SendMessage(IMessage.CreateMessage(IMessage.Owner, Server.GetServer().HostString, Reply.ERR_BADCHANNELKEY, new string[] { IMessage.Owner.NickName, s, "Cannot join channel (+k)" })); } } else { IMessage.Owner.SendMessage(IMessage.CreateMessage(IMessage.Owner, Server.GetServer().HostString, Reply.ERR_NOSUCHCHANNEL, new string[] { IMessage.Owner.NickName, s, "No such channel" })); } } }
public static void JoinClientToChannel(IMessage message) { //#Chan,#Chan2 ChanKey,ChanKey2 string[] channels = null; string[] chanKeys = null; if (message.Params.Count() > 1) { if (message.Params[1].Contains(',')) { chanKeys = message.Params[1].Split(','); } else { chanKeys = new string[] { message.Params[1] } }; } if (message.Params[0].Contains(',')) { channels = message.Params[0].Split(','); } else { channels = new string[] { message.Params[0] } }; foreach (string s in channels) { if (Database.GetDatabase().HasChannel(s.Remove(0, 1))) { IChannel j = Database.GetDatabase().GetChannel(s.Remove(0, 1)); if (chanKeys != null && chanKeys.Count() > Array.IndexOf <string>(channels, s)) { if (j.Modes.ContainsKey('k') && j.Modes['k'] == chanKeys[Array.IndexOf <string>(channels, s)]) { j.AddClient(message.Owner); } else { message.Owner.SendMessage(IRCMessage.GetStatic().CreateMessage(message.Owner, "", Reply.ERR_BADCHANNELKEY, new string[] { s, "Cannot join channel (+k)" })); } } else { j.AddClient(message.Owner); } } else { message.Owner.SendMessage(IRCMessage.GetStatic().CreateMessage(message.Owner, "", Reply.ERR_NOSUCHCHANNEL, new string[] { s, "No such channel" })); } } }
private void ChatMessage(ChatRoomMsg_t message) { if (message.m_ulSteamIDUser == clientUser.GetSteamID()) { return; } IChannel ch = GetSteamChannel(message.m_ulSteamIDChat); if (ch == null) { return; } byte[] msg = new byte[4096]; EChatEntryType type = EChatEntryType.k_EChatEntryTypeInvalid; int len = clientFriends.GetChatRoomEntry(message.m_ulSteamIDChat, (int)message.m_iChatID, ref message.m_ulSteamIDUser, msg, 4096, ref type); len--; if (type != EChatEntryType.k_EChatEntryTypeChatMsg && type != EChatEntryType.k_EChatEntryTypeEmote) { return; } byte[] a = new byte[len]; Array.Copy(msg, a, len); string[] Messs = Encoding.UTF8.GetString(a).Split(new char[] { '\n' }); IClient cl = GetSteamClient(message.m_ulSteamIDUser); if (cl == null) { if (clientList.Clients.ContainsKey(message.m_ulSteamIDUser)) { cl = clientList.Clients[message.m_ulSteamIDUser]; } else { cl = new SteamClient(message.m_ulSteamIDUser); } clients.Add(cl); ch.AddClient(cl); } foreach (string Mess in Messs) { cl.AddMessage(IRCMessage.GetStatic().CreateMessage(cl, cl.UserString, "PRIVMSG", new string[] { "&" + ch.ChannelName, (type == EChatEntryType.k_EChatEntryTypeEmote ? "ACTION " : "") + Mess + (type == EChatEntryType.k_EChatEntryTypeEmote ? "" : "") })); } //ch.SendMessage(Message.CreateMessage(cl, cl.UserString, "PRIVMSG", new string[] { "&" + Server.StripString(clientFriends.GetChatRoomName(message.m_ulSteamIDChat)), "" + (type == EChatEntryType.k_EChatEntryTypeEmote ? "ACTION " : "") + Mess + (type == EChatEntryType.k_EChatEntryTypeEmote ? "" : "") })); }