コード例 #1
0
ファイル: Program.cs プロジェクト: GEEKiDoS/TeknoMW3-M
        static void message_ChannelMessage(object sender, MessageEventArgs e)
        {
            IrcClient client = sender as IrcClient;

            foreach (RelayUser relay in RelayTargets)
            {
                if (relay.RelayingIRC)
                {
                    steamFriends.SendMsgToFriend(relay.SteamID, FriendMsgType.ChatSent, "<" + e.Sender.Nickname + "/" + e.SourceChannel + "> " + e.Message);
                }
            }
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: GEEKiDoS/TeknoMW3-M
        static void Main(string[] args)
        {
            int error;

            steamClient = (SteamClient008)Steamworks.CreateInterface(SteamClient008.InterfaceVersion, out error);
            if (steamClient == null)
            {
                Console.WriteLine("Unable to get SteamClient.");
                return;
            }

            pipe = steamClient.CreateSteamPipe();
            user = steamClient.ConnectToGlobalUser(pipe);


            _handler += new EventHandler(ConsoleEvent);
            SetConsoleCtrlHandler(_handler, true);

            steamFriends = ( SteamFriends001 )steamClient.GetISteamFriends(user, pipe, SteamFriends001.InterfaceVersion);
            steamUser    = (SteamUser012)steamClient.GetISteamUser(user, pipe, SteamUser012.InterfaceVersion);

            FriendsName = steamFriends.GetPersonaName();

            RelayTargets = new List <RelayUser>();

            ircClient = new IrcClient(RelayNick);
            ircClient.AlternateNickname = RelayNick + "`";

            ircClient.Debugger.Debugging = DebugMode.All;

            ConnectionParser connection = ircClient.ConnectionParser;
            MessageParser    message    = ircClient.MessageParser;

            connection.Connected   += new EventHandler <InfoEventArgs>(connection_Connected);
            message.ChannelMessage += new EventHandler <MessageEventArgs>(message_ChannelMessage);

            running = ircClient.Connect(RelayNetwork);

            DateTime lastUpdate = DateTime.Now;

            while (running)
            {
                ircClient.UpdateIn();

                if ((DateTime.Now - lastUpdate) >= RelayDelay && connected)
                {
                    ircClient.UpdateOut();
                    lastUpdate = DateTime.Now;
                }
                else
                {
                    ircClient.UpdateOut();
                }

                if (!connected)
                {
                    continue;
                }

                Callback        callback;
                SteamCallHandle steamCall;

                if (Steamworks.Steam_BGetCallback(pipe, out callback, out steamCall))
                {
                    Console.WriteLine("Callback: " + callback.CallbackNum);

                    if (callback.CallbackNum == FriendChatMsg.Callback)
                    {
                        FriendChatMsg chatMsg = ( FriendChatMsg )callback.CallbackObject;

                        SteamID sender   = new SteamID(chatMsg.Sender);
                        SteamID reciever = new SteamID(chatMsg.Reciever);

                        if (sender.Equals(steamUser.GetSteamID()))
                        {
                            Steamworks.Steam_FreeLastCallback(pipe);
                            continue;
                        }

                        string        msg;
                        FriendMsgType msgType;
                        steamFriends.GetChatMessage(reciever, ( int )chatMsg.ChatID, out msg, 400, out msgType);

                        if (msgType != FriendMsgType.Chat)
                        {
                            Steamworks.Steam_FreeLastCallback(pipe);
                            continue;
                        }

                        string senderStr = steamFriends.GetFriendPersonaName(sender);
                        msg = msg.Replace("\n", " ").Replace("\r", " ").Replace("DCC", "");

                        RelayUser ru = new RelayUser()
                        {
                            SteamID     = sender,
                            LastMessage = DateTime.Now.Subtract(TimeSpan.FromSeconds(1)),
                        };

                        if (!RelayTargets.Contains(ru))
                        {
                            RelayTargets.Add(ru);
                        }

                        RelayUser realUser = RelayTargets.Find(new Predicate <RelayUser>((ruser) => { return(ruser.SteamID.Equals(sender)); }));


                        if (msg.StartsWith("!relayon"))
                        {
                            realUser.RelayingIRC = true;
                            steamFriends.SendMsgToFriend(sender, FriendMsgType.ChatSent, "You are now added to the relay list.");
                        }
                        else if (msg.StartsWith("!relayoff"))
                        {
                            realUser.RelayingIRC = false;
                            steamFriends.SendMsgToFriend(sender, FriendMsgType.ChatSent, "You have been removed from the relay list.");
                        }
                        else
                        {
                            if (!realUser.RelayingIRC)
                            {
                                Steamworks.Steam_FreeLastCallback(pipe);
                                continue;
                            }

                            if ((DateTime.Now - realUser.LastMessage) >= TimeSpan.FromSeconds(1))
                            {
                                realUser.LastMessage = DateTime.Now;
                                ircClient.SendMessage(RelayChannel, senderStr + ": " + msg);
                            }
                            else
                            {
                                steamFriends.SendMsgToFriend(sender, FriendMsgType.ChatSent, "You are sending messages too fast.");
                            }
                        }
                    }

                    Steamworks.Steam_FreeLastCallback(pipe);
                }
            }
        }