private async void _openId_SteamOpenIdCallback(object sender, SteamOpenIdCallbackEventArgs e) { if (e.Successful) { var player = new { RealName = (string)null, PersonaName = (string)null }; try { using (var wc = new WebClient()) { var data = await wc.DownloadStringTaskAsync($@"http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key={_config.SteamApiKey}&steamids={e.SteamId}"); var response = JsonConvert.DeserializeAnonymousType(data, new { response = new { players = new[] { player } } }); player = response?.response?.players?.FirstOrDefault(); } } catch { /* ignore exceptions */ } //QueryMaster.Steam.GetPlayerSummariesResponsePlayer player = null; //await Task.Factory.StartNew(() => //{ // try // { // //this results in an exception (but it is easy enough to query by ourselves) // var query = new QueryMaster.Steam.SteamQuery(_config.SteamApiKey); // var result = query?.ISteamUser.GetPlayerSummaries(new[] { e.SteamId }); // if (result == null || !result.IsSuccess) return; // player = result.ParsedResponse.Players.FirstOrDefault(); // } // catch { /* ignore exceptions */} //}); //set ark role on users when they link //foreach(var server in _discord.Servers) //{ // var user = server.GetUser(e.DiscordUserId); // var role = server.FindRoles(_config.MemberRoleName, true).FirstOrDefault(); // if (user == null || role == null) continue; // //try // //{ // // if (!user.HasRole(role)) await user.AddRoles(role); // // var p = _context.Players?.FirstOrDefault(x => { ulong steamId = 0; return ulong.TryParse(x.SteamId, out steamId) ? steamId == e.SteamId : false; }); // // if (p != null && !string.IsNullOrWhiteSpace(p.Name)) // // { // // //must be less or equal to 32 characters // // await user.Edit(nickname: p.Name.Length > 32 ? p.Name.Substring(0, 32) : p.Name); // // } // //} // //catch (HttpException) // //{ // // //could be due to the order of roles on the server. bot role with "manage roles"/"change nickname" permission must be higher up than the role it is trying to set // //} //} using (var context = _databaseContextFactory.Create()) { var user = context.Users.FirstOrDefault(x => x.DiscordId == (long)e.DiscordUserId); if (user != null) { user.RealName = player?.RealName; user.SteamDisplayName = player?.PersonaName; user.SteamId = (long)e.SteamId; user.Unlinked = false; } else { user = new Database.Model.User { DiscordId = (long)e.DiscordUserId, SteamId = (long)e.SteamId, RealName = player?.RealName, SteamDisplayName = player?.PersonaName }; context.Users.Add(user); } foreach (var associatePlayed in context.Played.Where(x => x.SteamId == (long)e.SteamId)) { associatePlayed.SteamId = null; user.Played.Add(associatePlayed); } context.SaveChanges(); } var ch = await _discord.GetUser(e.DiscordUserId).GetOrCreateDMChannelAsync(); if (ch != null) { await ch.SendMessageAsync($"Your Discord user is now linked with your Steam account! :)"); } } else { var ch = await _discord.GetUser(e.DiscordUserId).GetOrCreateDMChannelAsync(); if (ch != null) { await ch.SendMessageAsync($"Something went wrong during the linking process. Please try again later!"); } } }
public UserToApiUserConverter(Database.Model.User user = null) { Content = user; }