コード例 #1
0
ファイル: ArkDiscordBot.cs プロジェクト: sticker94/ArkBot
        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!");
                }
            }
        }
コード例 #2
0
 public UserToApiUserConverter(Database.Model.User user = null)
 {
     Content = user;
 }