public static Configuration Load()
        {
            if (!File.Exists(GamesFile))
            {
                SaveDefaultGameData();
            }

            var gameData     = LoadGameData();
            var settingsData = LoadSettingsData();

            var library = SteamLibrary.Locate();
            var games   = SteamGameInfo.LocateGames(gameData, library);

            if (games.Count == 0)
            {
                throw new SteamException("No supported steam games found on this system.");
            }

            var users = SteamUserInfo.LocateUsers(library);

            if (users.Count == 0)
            {
                throw new SteamException("No steam users found on this system.");
            }

            var settings = ApplicationSettings.FromKeyValue(settingsData, games, users);

            return(new Configuration(games, users, settings));
        }
Exemple #2
0
        public async Task SteamUserAsync(EventContext context)
        {
            DateTime requestStart = DateTime.Now;

            string[] args = context.arguments.Split(' ');

            IDiscordEmbed embed = Utils.Embed;

            embed.SetAuthor("Steam Profile", steamAuthorIcon, "");

            SteamUserInfo user = await steam.GetSteamUser(args[0]);

            if (user == null)
            {
                embed = Utils.ErrorEmbed(context, "No user was found!");
                embed.QueueToChannel(context.Channel);
                return;
            }

            string userLevel = await steam.GetSteamLevel(user.SteamID);

            embed.SetThumbnailUrl(user.GetAvatarURL());

            /* Current Game & Embed Colour */
            if (user.IsPlayingGame())
            {
                if (user.CurrentGameName != "???")
                {
                    embed.SetDescription("Currently playing " + user.CurrentGameName);
                }
                else
                {
                    embed.SetDescription("Currently in-game");
                }
                embed.Color = new Color(0.5f, 1, 0.5f);
            }
            else if (user.PersonaState != 0)
            {
                embed.Color = new Color(0.5f, 0.5f, 1);
            }

            /* Name & ID */
            embed.AddInlineField("Name", user.GetUsername());
            embed.AddInlineField("ID", user.SteamID);

            /* Real Name & Country */
            embed.AddInlineField("Real Name", user.RealName);
            embed.AddInlineField("Country", (user.CountryCode != "???" ? ":flag_" + user.CountryCode.ToLower() + ": " : "") + user.CountryCode);

            /* Profile Link */
            embed.AddField("Link", user.ProfileURL);

            /* Created & Status */
            embed.AddInlineField("Created", String.Format("{0:MMMM d, yyyy}", user.TimeCreated));
            if (user.GetStatus() == "Offline")
            {
                embed.AddInlineField("Offline Since", ToTimeString(user.OfflineSince()));
            }
            else
            {
                embed.AddInlineField("Status", user.GetStatus());
            }

            /* Level */
            embed.AddInlineField("Level", userLevel);

            embed.SetFooter("Request took in " + Math.Round((DateTime.Now - requestStart).TotalMilliseconds) + "ms", "");
            embed.QueueToChannel(context.Channel);
        }
Exemple #3
0
        public void GroupRun(SteamFriends.ChatMsgCallback callback, Bot bot, object[] args = null)
        {
            List<string> strings = new List<string>(callback.Message.Split(' '));
            strings.RemoveAt(0);
            string user = (String.Join(" ", strings.ToArray()));
            bool found = false;

            SteamUserInfo userInfo = new SteamUserInfo();
            List<SteamUserInfo> chattingUsers = args[0] as List<SteamUserInfo>;
            foreach (SteamUserInfo sui in chattingUsers)
            {
                if (sui.username.Equals(user))
                {
                    found = true;
                    userInfo = sui;
                    break;
                }
            }

            if (found)
            {
                string accId = userInfo.id.ConvertToUInt64().ToString();

                //Begin building a message
                StringBuilder sb = new StringBuilder();
                sb.Append(String.Format("{0}'s stats:\n", user));

                using (dynamic steamPlayerService = WebAPI.GetInterface("IPlayerService"))
                {

                    Dictionary<string, string> funArgs = new Dictionary<string, string>();
                    funArgs["steamid"] = accId;
                    funArgs["key"] = bot.apikey;

                    //Get total number of games
                    KeyValue results = steamPlayerService.Call("GetOwnedGames", 1, funArgs);
                    string total = results["game_count"].Value.ToString();
                    sb.Append(String.Format("Games owned: " + total + "\n"));

                    funArgs.Clear();
                    funArgs["steamid"] = accId;
                    funArgs["key"] = bot.apikey;

                    //Get info about recently played games
                    results = steamPlayerService.Call("GetRecentlyPlayedGames", 1, funArgs);
                    string totalPlayed = results["total_count"].Value.ToString();
                    var games = results["games"];

                    sb.Append(String.Format("Games played: " + totalPlayed + "\n\n"));

                    try
                    {
                        foreach (var child in games.Children)
                        {
                            Dictionary<string, string> gameInfo = new Dictionary<string, string>();
                            foreach (var elem in child.Children)
                            {
                                gameInfo[elem.Name] = elem.Value;
                            }

                            int playtimeForever = int.Parse(gameInfo["playtime_forever"]);
                            int playtime2weeks = int.Parse(gameInfo["playtime_2weeks"]);

                            sb.Append(gameInfo["name"]);
                            sb.Append(", total time played: ");
                            sb.Append(String.Format("{0} hours {1} minutes", playtimeForever / 60, playtimeForever % 60));
                            sb.Append(", last two weeks: ");
                            sb.Append(String.Format("{0} hours {1} minutes", playtime2weeks / 60, playtime2weeks % 60));
                            sb.Append("\n");
                        }
                    }
                    catch(Exception e)
                    {
                        mLog.Error(String.Format("Exception encountered in Game.GroupRun: {0}", e.ToString()));
                        bot.ChatroomMessage(bot.chatRoomID, String.Format("Could not retrieve info about {0}, profile might be private.", user));
                        return;
                    }

                    bot.ChatroomMessage(bot.chatRoomID, sb.ToString());
                }
            }
        }