Exemple #1
0
 public Steam(Irc irc)
 {
     Thread steamloop = new Thread(() => SteamLoop(irc));
     steamloop.Start();
     while (!ready) ; // wait until ready
 }
Exemple #2
0
        private void SteamLoop(Irc irc){
             

            string userName = "******";
            string passWord = "******";


            steamClient.Connect(); // connect to the steam network

            bool finished = false;
            while (!finished)
            {
                CallbackMsg msg = steamClient.WaitForCallback(true); // block and wait until a callback is posted
                msg.Handle<SteamClient.ConnectedCallback>(callback =>
                {
                    // the Handle function will call this lambda method for this callback

                    if (callback.Result != EResult.OK)
                    {
                        // break; // the connect result wasn't OK, so something failed
                        sprint("STEAM_CONNECT_FAILED");
                        return;
                    }

                    sprint("STEAM_CONNECT_SUCCESS");

                    // we've successfully connected to steam3, so lets logon with our details
                    steamUser.LogOn(new SteamUser.LogOnDetails
                    {
                        Username = userName,
                        Password = passWord,
                    });
                });

                // Handle logging in
                msg.Handle<SteamUser.LoggedOnCallback>(callback =>
                {
                    if (callback.Result != EResult.OK)
                    {
                        // logon failed! 
                        sprint("LOGIN_FAILED_REASON " + callback.Result);
                        if (callback.Result == EResult.AccountLogonDenied)
                        {
                            sprint("steamguard is s***e: Disable it");
                        }
                        return;
                    }

                    sprint("LOGIN_SUCCEEDED");
                    // we've now logged onto Steam3
                });


                // Print incoming pms, messages with newlines will be treated as multiple messages
                msg.Handle<SteamFriends.FriendMsgCallback>(callback =>
                {
                    if (callback.EntryType == EChatEntryType.ChatMsg)
                    {
                        String[] lines = callback.Message.Split(new string[] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
                        foreach (string s in lines)
                        {
                            pmprint(callback.Sender, s);
                            //relayPmToIrc(callback.Sender, s);
                            irc.SendPM(nicks[callback.Sender], s);
                        }
                    }
                });

                // Print incoming group chat messages, messages with newlines will be treated as multiple messages
                msg.Handle<SteamFriends.ChatMsgCallback>(callback =>
                {
                    if (callback.ChatMsgType == EChatEntryType.ChatMsg)
                    {
                        String[] lines = callback.Message.Split(new string[] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
                        foreach (string s in lines)
                        {
                            grpprint(callback.ChatRoomID, callback.ChatterID, s);

                            /* Turn the chat id into the clan id */
                            callback.ChatRoomID.AccountType = EAccountType.Clan;
                            callback.ChatRoomID.AccountInstance = 0;

                            irc.SendChannelMsg(nicks[callback.ChatterID], clans[callback.ChatRoomID], s);
                        }
                    }
                    else
                    {
                        Console.WriteLine("AJHGJHGDJ");
                    }
                });

                // Handle disconnection
                // Only happens when you've been disconnected for a while
                msg.Handle<SteamClient.DisconnectedCallback>(callback =>
                {
                    Console.WriteLine("DISCONNECTED");
                    finished = true;
                });


                msg.Handle<SteamFriends.ChatEnterCallback>(callback =>
                {
                    Console.WriteLine(callback.EnterResponse);
                    //Console.WriteLine(clanchatters[callback.ClanID]);
                    chanstates[callback.ClanID] = chanstate.joined;
                });


                // Alerts name changes
                msg.Handle<SteamFriends.PersonaStateCallback>(callback =>
                {
                    SteamID id = callback.FriendID;
                    String name = steamFriends.GetFriendPersonaName(id);

                   
                    /* Add users to channel list */
                    if (callback.SourceSteamID.AccountType == EAccountType.Chat)
                    {
                        SteamID asclan = callback.SourceSteamID;
                        asclan.AccountType = EAccountType.Clan;
                        asclan.AccountInstance = 0;
                        //Console.WriteLine(steamFriends.GetClanName(asclan) + " " + name);

                        if (!clanchatters.ContainsKey(asclan))
                        {
                            clanchatters.Add(asclan, new List<SteamID>());
                        }
                        clanchatters[asclan].Add(id);
                        Console.WriteLine(name + " in " + clans[asclan]);
                    }

                    
                    
                    EPersonaState state = steamFriends.GetFriendPersonaState(id);

                    //Console.WriteLine(name + " " + state);

               
                    if (id.AccountType == EAccountType.Individual && name.Length > 0)
                    {
                        if (!namecache.ContainsKey(id))
                        {
                            namecache[id] = new idcache(name, state);
                            nicks.Add(Util.fixName(name, nicks, Irc.NICKLEN), id);
                        }
                        else
                        {
                            if (namecache[id].name != name)
                            {
                                //namecache[id] = new idcache(name, state);
                                namecache[id].name = name;
                                //Console.WriteLine("name change " + id + " " + name + " " + id.AccountType);
                            }

                            if (namecache[id].state != state)
                            {
                                namecache[id].state = state;
                                //Console.WriteLine("state change " + name + " " + state);
                            }
                        }
                    }
                });

                msg.Handle<SteamFriends.ChatMemberInfoCallback>(callback =>
                {
                    Console.WriteLine("asdhg " + callback.StateChangeInfo.ChatterActedOn);
                });

                // Start doing stuff once ready
                msg.Handle<SteamUser.LoginKeyCallback>(callback =>
                {
                    sprint("READY");
                    ready = true; // Allows other parts to start doing stuff
 
                    steamFriends.SetPersonaState(SteamKit2.EPersonaState.Online);
                    sprint("ONLINE");

                    // Initialise steamid cache
                    /*SteamID friend;
                    String name;
                    EPersonaState state;
                    for (int i = 0; i != steamFriends.GetFriendCount(); i++)
                    {
                        friend = steamFriends.GetFriendByIndex(i);
                        name = steamFriends.GetFriendPersonaName(friend);
                        state = steamFriends.GetFriendPersonaState(friend);

                        namecache[friend] = new idcache(name, state);
                        Console.WriteLine("FRIEND " + friend + " " + namecache[friend].name);

                        Thread.Sleep(1000);
                        Console.WriteLine("a----------------" + steamFriends.GetClanName(steamFriends.GetClanByIndex(0)));
                    }*/
                    friends = getFriends();
                    clans = getClans();

                    //Thread.Sleep(1000);
                    //steamFriends.JoinChat(steamFriends.GetClanByIndex(0));
                });

            }
        }
Exemple #3
0
        public static void Main()
        {
            irc = new Irc();
            steam = new Steam(irc);
            irc.start();
            

            //irc.join("#steamirc");
            //irc.sendNames("#steamirc");
            //getNicks();


            //getClans();

            //List<SteamID> friends = steam.getFriends();




            Message msg;
            do
            {
                msg = irc.Receive();
                switch (msg.type)
                {
                    case MSGTYPE.PM:
                        {
                            if (steam.nicks.Contains(msg.to))
                            {
                                steam.sendpm(steam.nicks[msg.to], msg.msg);
                            }
                            else
                            {
                                irc.NoSuchNick(msg.to);
                            }
                            break;
                        }

                    case MSGTYPE.CHANMSG:
                        {
                            //Console.WriteLine("chanmsg");
                            //irc.SendChannelMsg("steamirc", msg.to, msg.msg);
                            
                            /* Send message to steam chat, if clan exists, and we are joined to it's chat */
                            if (steam.clans.Contains(msg.to) && steam.chanstates[steam.clans[msg.to]] == chanstate.joined)
                            {
                                steam.sendChanmsg(steam.clans[msg.to], msg.msg);
                            }

                            if (msg.to == "#steamirc")
                            {
                                msg.msg = msg.msg.ToLower();

                                if (msg.msg.StartsWith("list"))
                                {
                                    String listwhat;
                                    try { listwhat = msg.msg.Split(' ')[1]; }
                                    catch { break; }

                                    if (listwhat == "friends")
                                    {
                                        foreach (SteamID friend in steam.friends)
                                        {
                                            irc.SendChannelMsg(steam.nicks[friend] + " " + steam.getFriendState(friend));
                                        }
                                    }
                                    else if (listwhat == "clans")
                                    {
                                        foreach (var pair in steam.clans)
                                        {
                                            irc.SendChannelMsg(pair.Key);
                                        }

                                    }
                                }
                            }


                            break;
                        }

                    case MSGTYPE.JOIN:
                        {
                            Console.WriteLine("joining " + msg.to);
                            if (steam.clans.Contains(msg.to))
                            {
                                 
                                steam.joinchat(steam.clans[msg.to]);
                                while (steam.chanstates[steam.clans[msg.to]] != chanstate.joined) ;

                                List<String> names = new List<string>();

                                //SteamID a = steam.clans[msg.to];
                                List<SteamID> ids = steam.clanchatters[steam.clans[msg.to]];
                                foreach(SteamID id in ids){
                                    names.Add(steam.nicks[id]);
                                    Console.WriteLine(steam.nicks[id]);
                                }

                                irc.sendNames(msg.to, names.ToArray());
                            }
                            //irc.sendNames(msg.to);
                            break;
                        }

                    default:
                        {
                            break;
                        }
                }

            } while (msg.type != MSGTYPE.QUIT);

            irc.Stop();
            steam.disconnect();


            Console.WriteLine("fin");
            Console.ReadLine();


        }