Beispiel #1
0
        public async Task <bool> GetUserByIdAsync(ulong steamId, ApplicationPlayerDetails toFill)
        {
            if (!IsApiKeySet())
            {
                return(false);
            }

            toFill.SteamId          = steamId;
            toFill.EverythingLoaded = false;

            try
            {
                // Player profile
                var playerSummaryResponse = await _steamUser.GetPlayerSummaryAsync(steamId);

                toFill.PlayerProfile = playerSummaryResponse.Data;

                // Friend list
                var friendListResponse = await _steamUser.GetFriendsListAsync(steamId);

                toFill.Friends = friendListResponse.Data.Select(x => x.SteamId).ToList();

                // Owned games
                var ownedGamesResponse = await _steamPlayerService.GetOwnedGamesAsync(steamId);

                toFill.OwnedGames       = ownedGamesResponse.Data;
                toFill.EverythingLoaded = true;

                return(true);
            }
            catch (SteamIdNotConstructedException)
            {
                return(false);
            }
        }
Beispiel #2
0
        private async Task <PlayerSummaryModel> GetUserInfo(long steamId)
        {
            var id       = Convert.ToUInt64(steamId);
            var response = await _steamUserInterface.GetPlayerSummaryAsync(id);

            return(response.Data);
        }
Beispiel #3
0
        public async Task <PlayerSummaryModel> Users(ulong playerID)
        {
            PlayerSummaryModel data = memCache.Get <PlayerSummaryModel>($"SteamInterface.GetPlayerSummaryAsync({playerID})");

            if (data != null)
            {
                return(data);
            }

            try
            {
                ISteamWebResponse <PlayerSummaryModel> wrappedData = await steamInterface.GetPlayerSummaryAsync(playerID);

                data = wrappedData.Data;

                if (data == null)
                {
                    return(data);
                }
                memCache.Set($"SteamInterface.GetPlayerSummaryAsync({playerID})", data, TimeSpan.FromHours(1));
                return(data);
            }
            catch { }

            return(null);
        }
Beispiel #4
0
        /// <summary>
        /// 获取Steam用户信息
        /// </summary>
        /// <param name="steamID"></param>
        /// <returns></returns>
        public async Task <PlayerSummaryModel> GetPlayerSummary(string steamID)
        {
            SteamUser iUser = WebInterfaceFactory.CreateSteamWebInterface <SteamUser>();
            ISteamWebResponse <PlayerSummaryModel> response = await iUser.GetPlayerSummaryAsync(ulong.Parse(steamID));

            return(response.Data);
        }
Beispiel #5
0
        public async Task GetPlayerSummaryAsync_Should_Succeed()
        {
            var response = await steamInterface.GetPlayerSummaryAsync(76561198050013009);

            Assert.NotNull(response);
            Assert.NotNull(response.Data);
        }
        public Tuple <string, string> GetUserInfo(ulong steamId)
        {
            var i = new SteamUser(_apiKey);
            var t = i.GetPlayerSummaryAsync(steamId);
            PlayerSummaryModel m = t.Result.Data;

            return(new Tuple <string, string>(m.Nickname, m.AvatarMediumUrl));
        }
        // this will map to ISteamUser/GetPlayerSummaries method in the Steam Web API
        // see PlayerSummaryResultContainer.cs for response documentation
        static async void GetPlayerSummary(ulong steamID, SteamUser steamInterface)
        {
            var playerSummaryResponse = await steamInterface.GetPlayerSummaryAsync(steamID);

            var playerSummaryData = playerSummaryResponse.Data;


            //player = JsonConvert.DeserializeObject<PlayerSummaryModel>(playerSummaryResponse);
        }
Beispiel #8
0
        private static async Task <SteamWebAPI2.Utilities.ISteamWebResponse <Steam.Models.SteamCommunity.PlayerSummaryModel> > GetPlayerSummary(string steamID3)
        {
            uint uintAccountID = (uint)Convert.ToUInt64(Int32.Parse(steamID3));

            SteamUser steamUser = new SteamUser(APIKey);
            SteamId   sid       = new SteamId(uintAccountID);

            var playerSummary = await steamUser.GetPlayerSummaryAsync(sid.To64Bit());

            return(playerSummary);
        }
        public async Task <IDictionary <string, uint> > GetCurrentPlayingGameUserAchievementsAsync(ulong steamId)
        {
            var user = new SteamUser(SteamSettings.WebApiKey);
            var playerSummaryResponse = await user.GetPlayerSummaryAsync(steamId);

            var gameId = uint.Parse(playerSummaryResponse.Data.PlayingGameId);

            var stats = new SteamUserStats(SteamSettings.WebApiKey);
            var currentGameStatsResponse = await stats.GetUserStatsForGameAsync(steamId, gameId);

            return(currentGameStatsResponse.Data.Achievements.ToDictionary(x => x.Name, x => x.Achieved));
        }
Beispiel #10
0
        public async Task SteamInfo()
        {
            string userID  = Context.User.Id.ToString();
            string steamID = await DataStorage.getSteamID(userID);

            var playerSummaryResponse = await steamInterface.GetPlayerSummaryAsync(Convert.ToUInt64(steamID));

            var playerSummaryData = playerSummaryResponse.Data;


            string nickName    = playerSummaryData.Nickname;
            string avatar      = playerSummaryData.AvatarFullUrl;
            string gamePlaying = playerSummaryData.PlayingGameName;

            if (gamePlaying == null)
            {
                gamePlaying = "Nothing";
            }
            string profile     = playerSummaryData.ProfileUrl;
            string userStatus  = playerSummaryData.UserStatus.ToString();
            string createdDate = playerSummaryData.AccountCreatedDate.ToString();

            string description = "";

            description += "Currently Playing: " + gamePlaying + "\n";
            description += "User Status: " + userStatus + "\n";
            description += "Account Created: " + createdDate + "\n";
            embed.WithTitle(nickName);
            embed.WithDescription(description);
            embed.WithUrl(profile);
            embed.WithThumbnailUrl(avatar);
            embed.WithColor(0, 173, 238);
            await Context.Channel.SendMessageAsync("", false, embed);

            ds.addPoints(userID, 5);
            await checkLevel(userID);
        }
        private static async Task ParseNewSteamIds()
        {
            try {
                List <string> steamIdsToParse = FetchSteamIds(true);

                using (BatchQueryBuilder batchQuerybuilder = new BatchQueryBuilder(_config.ConnString)) {
                    SteamUser steamInterface = new SteamUser(_config.SteamWebApiKey);

                    foreach (string i in steamIdsToParse)
                    {
                        if (i == "0")
                        {
                            continue;
                        }
                        try {
                            Console.WriteLine($"Parsing Steam ID {i}");
                            PlayerSummaryModel playerSummaryResponseData = (await steamInterface.GetPlayerSummaryAsync(ulong.Parse(i))).Data;
                            IReadOnlyCollection <PlayerBansModel> playerBansResponseData    = (await steamInterface.GetPlayerBansAsync(ulong.Parse(i))).Data;
                            IReadOnlyCollection <FriendModel>     playerFriendsResponseData = null;
                            if (playerSummaryResponseData.ProfileVisibility == ProfileVisibility.Public)
                            {
                                playerFriendsResponseData = (await steamInterface.GetFriendsListAsync(ulong.Parse(i))).Data;
                            }
                            batchQuerybuilder.AppendSqlCommand(new MySqlCommand($"UPDATE FamilyRpServerAccess.ParsedSteamAccounts SET SteamCreated = '{playerSummaryResponseData.AccountCreatedDate:s}', RowUpdated = NOW()," +
                                                                                $"SteamName = '{MySqlHelper.EscapeString( Utf8ToAscii( playerSummaryResponseData.Nickname ) )}'," +
                                                                                $"SteamVisibility = '{playerSummaryResponseData.ProfileVisibility}'," +
                                                                                $"NumSteamFriends = {playerFriendsResponseData?.Count ?? 0}," +
                                                                                $"SteamBans = {playerBansResponseData.First().NumberOfGameBans + (playerBansResponseData.First().CommunityBanned ? 1 : 0) + playerBansResponseData.First().NumberOfVACBans}," +
                                                                                "isParsed = 1 " +
                                                                                $"WHERE SteamId = {i};"));
                            AuditLog(null, "Steam", "Parsed", "", i, batchQuerybuilder);
                        }
                        catch (Exception ex) {
                            if (!(ex.ToString().Contains("System.Net.Http.HttpRequestException") && ex.ToString().Contains("Unauthorized")))
                            {
                                Console.WriteLine($"Could not fetch Steam ID {i}: {ex}");
                            }
                        }
                    }
                }
            }
            catch (Exception ex) {
                Console.WriteLine($"{ex}");
            }
        }
Beispiel #12
0
        public async Task <PlayerSummaryModel> GetSteamUserData(ulong id)
        {
            if (steamInterface == null)
            {
                return(null);
            }
            Tuple <DateTime, PlayerSummaryModel> newPlayerData = null;

            if (steamPlayerCache.TryGetValue(id, out newPlayerData))
            {
                if (newPlayerData.Item1 > DateTime.UtcNow)
                {
                    newPlayerData = null;
                }
            }
            if (newPlayerData == null)
            {
                ISteamWebResponse <PlayerSummaryModel> playerData = await Task.Run(async() =>
                {
                    try
                    {
                        ISteamWebResponse <PlayerSummaryModel> msg = await steamInterface.GetPlayerSummaryAsync(id);
                        return(msg);
                    }
                    catch
                    {
                        return(null);
                    }
                });

                if (playerData != null)
                {
                    newPlayerData = new Tuple <DateTime, PlayerSummaryModel>(DateTime.UtcNow.AddHours(1), playerData.Data);

                    steamPlayerCache.AddOrUpdate(id, newPlayerData,
                                                 (key, existingVal) =>
                    {
                        return(newPlayerData);
                    });
                }
            }
            return(newPlayerData?.Item2);
        }
        /// <summary>
        /// Handles the Click event of the doneButton control.
        /// Makes sure that the Steam API key is valid and closes this form to allow the next form to open.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        private async void doneButton_Click(object sender, EventArgs e)
        {
            try
            {
                SteamWebInterfaceFactory webInterfaceFactory = new SteamWebInterfaceFactory(apiKeyTextBox.Text);
                SteamUser steamInterface = webInterfaceFactory.CreateSteamWebInterface <SteamUser>(new HttpClient());
                await steamInterface.GetPlayerSummaryAsync(76561197977699530).ConfigureAwait(false); // SteamId of https://steamcommunity.com/id/valve

                Program.SteamApiKey = apiKeyTextBox.Text;
                Invoke(new MethodInvoker(() => Close()));
            }
            catch
            {
                if (MessageBox.Show("Encountered an error while trying to use the API Key. Would you like to continue without an API Key?", "API Key Error", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    Program.SteamApiKey = "";
                    Invoke(new MethodInvoker(() => Close()));
                }
            }
        }
Beispiel #14
0
        private async Task RunSteamStuff()
        {
            // this will map to the ISteamUser endpoint
            var steamInterface          = new SteamUser(config.ApiKey);
            var player                  = new PlayerService(config.ApiKey);
            TimeSpanConverter converter = new TimeSpanConverter();

            var playerSummaryResponse = await steamInterface.GetPlayerSummaryAsync(ulong.Parse(steamidInput.Text));

            var playerSummaryData = playerSummaryResponse.Data;

            outputText.Text = playerSummaryData.Nickname;

            timespan = (TimeSpan)converter.ConvertFromString(hourInput.Text + ":" + minuteInput.Text + ":" + secondInput.Text);
            var ownedgames = await player.GetOwnedGamesAsync(config.UserId, includeAppInfo : true, includeFreeGames : cb_freeGames.Checked);

            var gamesdata = ownedgames.Data;

            games = gamesdata.OwnedGames.ToList();
            if (radioSortNameA.Checked)
            {
                games = games.OrderBy(x => x.Name).ToList();
                DisplayGameList(games);
            }
            else if (radioSortTimeD.Checked)
            {
                games = games.OrderByDescending(x => x.PlaytimeForever).ToList();
                DisplayGameList(games);
            }
            else if (radioSortTimeA.Checked)
            {
                games = games.OrderBy(x => x.PlaytimeForever).ToList();
                DisplayGameList(games);
            }
            else if (radioSortNameD.Checked)
            {
                games = games.OrderByDescending(x => x.Name).ToList();
                DisplayGameList(games);
            }
            DisplayGameList(games);
        }
Beispiel #15
0
        private static async Task ParseNewSteamIds()
        {
            List <string> SteamIdsToParse = FetchSteamIds(true);

            using (BatchQueryBuilder batchQuerybuilder = new BatchQueryBuilder(config.ConnString))
            {
                var steamInterface = new SteamUser(config.SteamWebApiKey, null);

                foreach (string i in SteamIdsToParse)
                {
                    if (i == "0")
                    {
                        continue;
                    }
                    try
                    {
                        Console.WriteLine($"Parsing Steam ID {i}");
                        var playerSummaryResponseData = (await steamInterface.GetPlayerSummaryAsync(UInt64.Parse(i))).Data;
                        var playerBansResponseData    = (await steamInterface.GetPlayerBansAsync(UInt64.Parse(i))).Data;
                        IReadOnlyCollection <FriendModel> playerFriendsResponseData = null;
                        if (playerSummaryResponseData.ProfileVisibility == Steam.Models.SteamCommunity.ProfileVisibility.Public)
                        {
                            playerFriendsResponseData = (await steamInterface.GetFriendsListAsync(UInt64.Parse(i))).Data;
                        }
                        batchQuerybuilder.AppendSqlCommand(new MySqlCommand($"UPDATE FamilyRpServerAccess.ParsedSteamAccounts SET SteamCreated = '{playerSummaryResponseData.AccountCreatedDate}',RowUpdated = NOW()," +
                                                                            $"SteamName = '{MySqlHelper.EscapeString(UTF8toASCII(playerSummaryResponseData.Nickname))}'," +
                                                                            $"SteamVisibility = '{playerSummaryResponseData.ProfileVisibility}'," +
                                                                            $"NumSteamFriends = {(playerFriendsResponseData != null ? playerFriendsResponseData.Count : 0)}," +
                                                                            $"SteamBans = {playerBansResponseData.First().NumberOfGameBans + (playerBansResponseData.First().CommunityBanned ? 1 : 0) + playerBansResponseData.First().NumberOfVACBans}," +
                                                                            $"isParsed = 1 " +
                                                                            $"WHERE SteamId = {i};"));
                        AuditLog(null, "Steam", "Parsed", "", i, batchQuerybuilder);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"Could not fetch Steam ID {i}: {ex}");
                    }
                }
            }
        }
Beispiel #16
0
        /// <summary>
        /// Will call steam API to update user details
        /// </summary>
        public async void UpdateUser(object sender, RoutedEventArgs e)
        {
            CurrentUser currentUser           = new CurrentUser();
            var         steamInterface        = new SteamUser(APIKey);
            var         playerSummaryResponse = await steamInterface.GetPlayerSummaryAsync(userKey);

            var playerSummaryData = playerSummaryResponse.Data;

            currentUser.AvatarUrl = playerSummaryResponse.Data.AvatarFullUrl;
            Debug.Print("AVATAR: " + currentUser.AvatarUrl);
            currentUser.CreationDate = playerSummaryResponse.Data.AccountCreatedDate;
            currentUser.ProfileUrl   = playerSummaryResponse.Data.ProfileUrl;

            var accountCreationDate = playerSummaryData.AccountCreatedDate;
            var nickname            = playerSummaryData.Nickname;

            Debug.Print("Account creation date: " + accountCreationDate.ToString());
            Debug.Print("Username: "******"Friend: " + friend.SteamId.ToString());
            }

            var userStats  = new SteamUserStats(APIKey);
            var steamStats = new SteamApps(APIKey);

            AvatarImage.Source           = new BitmapImage(new Uri(currentUser.AvatarUrl));
            UserNameText.Text            = "Username: "******"Account creation date: " + currentUser.CreationDate;

            File.Delete("SavedUser" + username + ".xml");
            SaveSerializeObject <CurrentUser>(currentUser, "SavedUser" + username + ".xml");
        }
Beispiel #17
0
 /// <summary>
 /// Gets a Steam user's <see cref="PlayerSummaryModel"/>
 /// </summary>
 /// <param name="steamId"></param>
 /// <returns></returns>
 public static PlayerSummaryModel GetSteamUserSummary(ulong steamId)
 {
     return(steamUserInterface.GetPlayerSummaryAsync(steamId).GetAwaiter().GetResult().Data);
 }
        private static async Task MakeCall()
        {
            Log.Information("Making call");
            if (s_SpotifyToken.IsExpired())
            {
                Log.Debug("Spotify token expired... Refreshing");
                await RefreshSpotifyToken();
            }

            var playbackContext = await s_SpotifyAPI.GetPlaybackAsync();

            var summary = await s_SteamAPI.GetPlayerSummaryAsync(s_SteamId);

            if (playbackContext?.HasError() != false)
            {
                Log.Warning("playbackContext is null or has a error");
                if (playbackContext.Error is not null)
                {
                    Log.Warning(playbackContext.Error.ToString());
                }
            }

            // Spotify music is playing?
            var isPlayingSpotify = playbackContext?.IsPlaying == true && playbackContext.Item != null;

            if (isPlayingSpotify)
            {
                var audios = await s_VKAPI.Audio.SearchAsync(new()
                {
                    SearchOwn     = false,
                    PerformerOnly = false,
                    Count         = 1,
                    Query         = $"{Extensions.GetArtists(playbackContext.Item.Artists)} {playbackContext.Item.Name}"
                });

                string vkFullAudio;
                if (audios?.Any() == false)
                {
                    Log.Debug("Didn't found a music in VK");
                    Log.Debug("Trying translit to russian");

                    audios = await s_VKAPI.Audio.SearchAsync(new()
                    {
                        SearchOwn     = false,
                        PerformerOnly = false,
                        Count         = 1,
                        Query         = $"{Transliteration.LatinToCyrillic(Extensions.GetArtists(playbackContext.Item.Artists))} {playbackContext.Item.Name}"
                    });

                    var audio = audios.FirstOrDefault();
                    vkFullAudio = audio is not null ? $"{audio.OwnerId}_{audio.Id}" : string.Empty;
                }
                else
                {
                    var audio = audios[0];
                    vkFullAudio = $"{audio.OwnerId}_{audio.Id}";
                }

                if (!string.IsNullOrEmpty(vkFullAudio))
                {
                    Log.Debug($"Found music in VK {vkFullAudio}");

                    if (s_VKAudioId == vkFullAudio)
                    {
                        Log.Debug("Old VkAudio is equals to new.. Skipping");
                        return;
                    }
                    s_VKAudioId = vkFullAudio;
                    await s_VKAPI.Audio.SetBroadcastAsync(vkFullAudio);

                    return;
                }

                Log.Debug("Didn't found a music in VK");
                Log.Debug($"Searched: {playbackContext.Item.Name}");
            }
            else if (!string.IsNullOrEmpty(s_VKAudioId))
            {
                Log.Debug("Set not listening");
                s_VKAudioId = string.Empty;
                await s_VKAPI.Audio.SetBroadcastAsync();
            }

            // Steam playing game
            var gameNameSteam = summary.Data?.PlayingGameName;
            // Steam user is online
            var isOnlineSteam = summary.Data?.UserStatus is UserStatus.Online;
            var sb            = new StringBuilder();

            if (isPlayingSpotify)
            {
                sb.Append(s_StringLocalizer["Spotify", new[] { Extensions.GetArtists(playbackContext.Item.Artists), playbackContext.Item.Name,
                                                               Extensions.GetTime(playbackContext.Item.DurationMs, playbackContext.ProgressMs) }]);
            }
            else
            {
                sb.Append(s_StringLocalizer["SpotifyNothing"]);
            }

            sb.Append(s_StringLocalizer["Steam",
                                        new[] { string.IsNullOrEmpty(gameNameSteam) ? isOnlineSteam ? "в онлайне" : "в оффлайне" : gameNameSteam }]);

            if (!(isPlayingSpotify || !string.IsNullOrEmpty(gameNameSteam)))
            {
                sb.Append(s_StringLocalizer["AFK"]);
            }

            var status = sb.ToString();

            Log.Verbose(status);
            if (s_VKStatus == status)
            {
                Log.Debug("Old status is equals to new. Skip the updating");
                return;
            }

            s_VKStatus = status;
            await s_VKAPI.Status.SetAsync(s_VKStatus);
        }
Beispiel #19
0
        public async Task <PlayerSummaryModel> GetUserSummary(ulong userSteamId)
        {
            var response = await _user.GetPlayerSummaryAsync(userSteamId);

            return(response.Data);
        }
Beispiel #20
0
        private static async void OnTimerTicked(object sender, ElapsedEventArgs e)
        {
            if (Global.Client == null) //Ensures the Discord Client is running before the timer begins
            {
                Console.WriteLine("Timer Ticked before Client was ready");
                return;
            }
            //Console.WriteLine("Timer Cycle Complete");
            try
            {
                if (count == 0)                                  //On the first cycle of the timer get critical information and store it in the database
                {
                    foreach (var guild in Global.Client.Guilds)  //For every server currently running the bot
                    {
                        foreach (var user in guild.Users)        //For every user in each server
                        {
                            string userID  = user.Id.ToString(); //Retrieve userID
                            string steamID = null;
                            while (steamID == null && !user.IsBot)
                            {
                                steamID = DataStorage.getSteamID(userID).Result; //Use userID to access users steam ID in the database
                            }

                            if (!user.IsBot && userID != null) //If the user is not a bot and the user exists
                            {
                                var    gameResponse = steamInterface.GetPlayerSummaryAsync(Convert.ToUInt64(steamID));
                                string game         = gameResponse.Result.Data.PlayingGameName;
                                if (game == null)
                                {
                                    game = "none";
                                }
                                DataStorage.setNowPlaying(userID, game); //Set the nowPlaying value in the database for this user to the game received from the Steam API
                            }
                        }
                    }
                }
                else
                {
                    foreach (var guild in Global.Client.Guilds)  //For each server running the bot
                    {
                        foreach (var chan in guild.TextChannels) //For each channel in each server
                        {
                            if (chan.Name == "general")          //Find the channel named general and assign its ID to a variable channel
                            {
                                channel = chan;
                            }
                        }
                        foreach (var user in guild.Users) //For each user in the server
                        {
                            //Retrieve the users steam ID from the database
                            string userID  = user.Id.ToString();
                            string steamID = null;
                            while (steamID == null && !user.IsBot)
                            {
                                steamID = DataStorage.getSteamID(userID).Result;
                            }

                            //If the user is not a bot
                            if (!user.IsBot)
                            {
                                //Get the data from the Steam API for the game that the current Steam ID is playing
                                var    gameResponse = steamInterface.GetPlayerSummaryAsync(Convert.ToUInt64(steamID));
                                string game         = gameResponse.Result.Data.PlayingGameName;
                                string gameID       = gameResponse.Result.Data.PlayingGameId;
                                var    store        = steamStoreIntferace.GetStoreAppDetailsAsync(Convert.ToUInt32(gameID));
                                string imageURL     = store.Result.HeaderImage;


                                if (game == null)
                                {
                                    game = "none";
                                }
                                string checkGame = DataStorage.getNowPlaying(userID); //Gets the nowPlaying value from the database

                                //If the game in the current users row for nowPlaying in the database does not match the report from the Steam API
                                //A change has occured and the user is now playing a game so create an embed and post it to the channel as an alert.
                                if (game.Trim() != checkGame.Trim())
                                {
                                    embed.WithTitle(user.Username + " Is Now Playing: " + game);
                                    embed.WithColor(0, 173, 238);

                                    if (imageURL == null)
                                    {
                                        game     = "none";
                                        gameID   = "none";
                                        imageURL = "none";
                                    }
                                    DataStorage.setNowPlaying(userID, game);

                                    if (game != "none")
                                    {
                                        embed.WithImageUrl(imageURL);

                                        //await channel.SendMessageAsync("", false, embed);
                                    }
                                }
                            }
                        }
                    }
                }
                count = 1; //Increments the count variable to ensure the initial check does not happen twice.
            }
            catch (Exception exc)
            {
            }
        }
Beispiel #21
0
        public async Task <string> GetUserName(ulong steamId)
        {
            var rs = await m_interface.GetPlayerSummaryAsync(steamId);

            return(rs.Data.Nickname);
        }
Beispiel #22
0
        public async Task <string> SteamAvatarUrl(ulong steamId)
        {
            var response = await _steamUser.GetPlayerSummaryAsync(steamId);

            return(response.Data?.AvatarFullUrl);
        }
Beispiel #23
0
        public async Task SteamUser(CommandContext ctx, string query)
        {
            if (string.IsNullOrWhiteSpace(query))
            {
                await BotServices.SendErrorEmbedAsync(ctx, ":warning: SteamID or Community URL are required! Try **.su criticalflaw**");
            }
            else
            {
                var service = new BotServices();
                var steam   = new SteamUser(service.GetAPIToken("steam"));
                SteamCommunityProfileModel             profile = null;
                ISteamWebResponse <PlayerSummaryModel> summary = null;
                try
                {
                    var decode = await steam.ResolveVanityUrlAsync(query);

                    profile = await steam.GetCommunityProfileAsync(decode.Data).ConfigureAwait(false);

                    summary = await steam.GetPlayerSummaryAsync(decode.Data).ConfigureAwait(false);
                }
                catch
                {
                    profile = await steam.GetCommunityProfileAsync(ulong.Parse(query)).ConfigureAwait(false);

                    summary = await steam.GetPlayerSummaryAsync(ulong.Parse(query)).ConfigureAwait(false);
                }
                finally
                {
                    if (profile != null && summary != null)
                    {
                        await ctx.TriggerTypingAsync();

                        var output = new DiscordEmbedBuilder()
                                     .WithTitle(summary.Data.Nickname);
                        if (summary.Data.ProfileVisibility == ProfileVisibility.Public)
                        {
                            output.WithThumbnailUrl(profile.AvatarFull.ToString());
                            output.WithColor(DiscordColor.MidnightBlue);
                            output.WithUrl($"http://steamcommunity.com/id/{profile.SteamID}/");
                            output.WithFooter($"Steam ID: {profile.SteamID}");
                            output.AddField("Member since",
                                            summary.Data.AccountCreatedDate.ToUniversalTime().ToString(CultureInfo.CurrentCulture), true);
                            if (!string.IsNullOrWhiteSpace(profile.Summary))
                            {
                                output.WithDescription(Regex.Replace(profile.Summary, "<[^>]*>", ""));
                            }
                            if (summary.Data.UserStatus != UserStatus.Offline)
                            {
                                output.AddField("Status:", summary.Data.UserStatus.ToString(), true);
                            }
                            else
                            {
                                output.AddField("Last seen:", summary.Data.LastLoggedOffDate.ToUniversalTime().ToString(CultureInfo.CurrentCulture), true);
                            }
                            output.AddField("VAC Banned?:", profile.IsVacBanned ? "YES" : "NO", true);
                            output.AddField("Trade Banned?:", profile.TradeBanState, true);
                            if (profile.InGameInfo != null)
                            {
                                output.AddField("In-Game:", $"[{profile.InGameInfo.GameName}]({profile.InGameInfo.GameLink})", true);
                                output.AddField("Game Server IP:", profile.InGameServerIP, true);
                                output.WithImageUrl(profile.InGameInfo.GameLogoSmall);
                            }
                        }
                        else
                        {
                            output.Description = "This profile is private...";
                        }
                        await ctx.RespondAsync(embed : output.Build());
                    }
                    else
                    {
                        await BotServices.SendErrorEmbedAsync(ctx, ":mag: No results found!");
                    }
                }
            }
        }
        public async Task <string> ProcessCommandAsync(string inputMessage)
        {
            if (inputMessage == "!steam")
            {
                return("!steam [command] [username] to use various Steam commands. Valid commands are 'id', 'user', 'bans', 'friends', 'achievements'.");
            }
            else if (inputMessage.StartsWith("!steam"))
            {
                var    splitParsedMessage    = inputMessage.Split(' ');
                string steamCommand          = splitParsedMessage[1];
                string steamCommandParameter = splitParsedMessage[2];

                await steamIdContainer.ResolveAsync(steamCommandParameter);

                ulong steamId = steamIdContainer.To64Bit();

                if (steamCommand == "id")
                {
                    return($"Steam ID for {steamCommandParameter} is {steamId}");
                }
                else if (steamCommand == "user")
                {
                    var steamUser = await steamUserInterface.GetPlayerSummaryAsync(steamId);

                    string response = $"Steam profile for {steamCommandParameter} is {steamUser.Data.ProfileUrl} . Account created on: {steamUser.Data.AccountCreatedDate.ToShortDateString()}. User status is: {steamUser.Data.UserStatus}.";
                    if (!string.IsNullOrWhiteSpace(steamUser.Data.PlayingGameName))
                    {
                        response += $" Currently playing: {steamUser.Data.PlayingGameName}.";
                    }
                    return(response);
                }
                else if (steamCommand == "bans")
                {
                    var steamBans = await steamUserInterface.GetPlayerBansAsync(steamId);

                    // let's just look at the first ban for now
                    var    ban        = steamBans.Data.ToList()[0];
                    string banMessage = $"{steamCommandParameter} has {ban.NumberOfGameBans} game bans and {ban.NumberOfVACBans} VAC bans. Community banned: {ban.CommunityBanned}. VAC banned: {ban.VACBanned}. Economy banned: {ban.EconomyBan}.";
                    if (ban.NumberOfGameBans > 0 || ban.NumberOfVACBans > 0)
                    {
                        banMessage += $" Days since last ban: {ban.DaysSinceLastBan}.";
                    }
                    return(banMessage);
                }
                else if (steamCommand == "friends")
                {
                    var steamFriends = await steamUserInterface.GetFriendsListAsync(steamId);

                    return($"{steamCommandParameter} has {steamFriends.Data.Count} friends");
                }
                else if (steamCommand == "achievements")
                {
                    var appId             = uint.Parse(splitParsedMessage[3]);
                    var steamAchievements = await steamUserStatsInterface.GetPlayerAchievementsAsync(appId, steamId);

                    var completedAchievements = steamAchievements.Data.Achievements.Where(x => x.Achieved == 1);
                    return($"{steamCommandParameter} has {completedAchievements.Count()} achievements in {steamAchievements.Data.GameName}");
                }
                else if (steamCommand == "players")
                {
                    var appId        = uint.Parse(splitParsedMessage[2]);
                    var steamPlayers = await steamUserStatsInterface.GetNumberOfCurrentPlayersForGameAsync(appId);

                    var gameName = games[appId];
                    return($"{gameName} has {steamPlayers.Data} current players");
                }
                else if (steamCommand == "level")
                {
                    var steamLevel = await playerServiceInterface.GetSteamLevelAsync(steamId);

                    return($"{steamCommandParameter} is level {steamLevel.Data} on Steam");
                }
                else if (steamCommand == "badges")
                {
                    var steamBadges = await playerServiceInterface.GetBadgesAsync(steamId);

                    return($"{steamCommandParameter} is level {steamBadges.Data.PlayerLevel} which required {steamBadges.Data.PlayerXpNeededCurrentLevel} XP. {steamCommandParameter} has {steamBadges.Data.PlayerXp} XP and needs {steamBadges.Data.PlayerXpNeededToLevelUp} XP to level up.");
                }
                else if (steamCommand == "recent")
                {
                    var recentGames = await playerServiceInterface.GetRecentlyPlayedGamesAsync(steamId);

                    var    gameList       = recentGames.Data.RecentlyPlayedGames.Select(x => $"{x.Name} (Total: {Math.Round((double)x.PlaytimeForever / 60, 1)} hrs, 2 Wks: {Math.Round((double)x.Playtime2Weeks / 60, 1)} hrs)");
                    string joinedGameList = string.Join(", ", gameList);
                    string response       = $"{steamCommandParameter} has played {recentGames.Data.TotalCount} games in the last 2 weeks: {joinedGameList}.";
                    return(response);
                }
                else if (steamCommand == "news")
                {
                    var appId    = uint.Parse(splitParsedMessage[2]);
                    var gameName = games[appId];
                    var news     = await steamNewsInterface.GetNewsForAppAsync(appId, 1);

                    var recentNews = news.Data.NewsItems.ToList()[0];
                    return($"Here's the latest news for {gameName}. Author: {recentNews.Author}, Title: {recentNews.Title}, Url: {recentNews.Url} .");
                }
            }

            return(string.Empty);
        }
Beispiel #25
0
 public async Task <PlayerSummaryModel> GetPlayerSummary(ulong id) =>
 await _caches[PlayerSummaryCacheKey].AddOrGetExisting(id.ToString(), async() => (await SteamUser.GetPlayerSummaryAsync(id))?.Data);