Esempio n. 1
0
        public Task <PublishedFileDetails> GetPubfileDetails(PublishedFileID pubFile)
        {
            var tsc = new TaskCompletionSource <PublishedFileDetails>();

            var pubFileRequest = new CPublishedFile_GetDetails_Request();

            pubFileRequest.publishedfileids.Add(pubFile);

            IDisposable subscription = null;
            Action <SteamUnifiedMessages.ServiceMethodResponse> cbMethod = callback =>
            {
                subscription.Dispose();
                if (callback.Result == EResult.OK)
                {
                    var response = callback.GetDeserializedResponse <CPublishedFile_GetDetails_Response>();
                    tsc.SetResult(response.publishedfiledetails[0]);
                }
                else
                {
                    tsc.SetResult(null);
                    throw new Exception($"EResult {(int)callback.Result} ({callback.Result}) while retrieving UGC id for pubfile {pubFile}.");
                }
            };

            subscription = callbacks.Subscribe(steamPublishedFile.SendMessage(api => api.GetDetails(pubFileRequest)), cbMethod);
            return(tsc.Task);
        }
Esempio n. 2
0
        public PublishedFileDetails GetPublishedFileDetails(uint appId, PublishedFileID pubFile)
        {
            var pubFileRequest = new CPublishedFile_GetDetails_Request()
            {
                appid = appId
            };

            pubFileRequest.publishedfileids.Add(pubFile);

            bool completed = false;
            PublishedFileDetails details = null;

            Action <SteamUnifiedMessages.ServiceMethodResponse> cbMethod = callback =>
            {
                completed = true;
                if (callback.Result == EResult.OK)
                {
                    var response = callback.GetDeserializedResponse <CPublishedFile_GetDetails_Response>();
                    details = response.publishedfiledetails.FirstOrDefault();
                }
                else
                {
                    throw new Exception($"EResult {(int)callback.Result} ({callback.Result}) while retrieving file details for pubfile {pubFile}.");
                }
            };

            WaitUntilCallback(() =>
            {
                callbacks.Subscribe(steamPublishedFile.SendMessage(api => api.GetDetails(pubFileRequest)), cbMethod);
            }, () => { return(completed); });

            return(details);
        }
Esempio n. 3
0
        public override async Task OnCommand(CommandArguments command)
        {
            if (command.Message.Length == 0)
            {
                command.Reply($"Usage:{Colors.OLIVE} pubfile <pubfileid>");

                return;
            }

            if (!ulong.TryParse(command.Message, out var pubFileId))
            {
                command.Reply("Invalid Published File ID");

                return;
            }

            var pubFileRequest = new CPublishedFile_GetDetails_Request
            {
                includeadditionalpreviews = true,
                includechildren           = true,
                includetags        = true,
                includekvtags      = true,
                includevotes       = true,
                includeforsaledata = true,
                includemetadata    = true,
            };

            pubFileRequest.publishedfileids.Add(pubFileId);

            var task = PublishedFiles.SendMessage(api => api.GetDetails(pubFileRequest));

            task.Timeout = TimeSpan.FromSeconds(10);
            var callback = await task;
            var response = callback.GetDeserializedResponse <CPublishedFile_GetDetails_Response>();
            var details  = response.publishedfiledetails.FirstOrDefault();

            if (details == null)
            {
                command.Reply("Unable to make service request for published file info: the server returned no info");

                return;
            }

            var result = (EResult)details.result;

            if (result != EResult.OK)
            {
                command.Reply($"Unable to get published file info: {Colors.RED}{result}");

                return;
            }

            var json = JsonConvert.SerializeObject(details, Formatting.Indented);

            await File.WriteAllTextAsync(Path.Combine(Application.Path, "ugc", $"{details.publishedfileid}.json"), json, Encoding.UTF8);

            command.Reply($"{(EWorkshopFileType)details.file_type}, Title: {Colors.BLUE}{(string.IsNullOrWhiteSpace(details.title) ? "[no title]" : details.title)}{Colors.NORMAL}, Creator: {Colors.BLUE}{new SteamID(details.creator).Render()}{Colors.NORMAL}, App: {Colors.BLUE}{details.creator_appid}{(details.creator_appid == details.consumer_appid ? "" : $" (consumer {details.consumer_appid})")}{Colors.NORMAL}, File UGC: {Colors.BLUE}{details.hcontent_file}{Colors.NORMAL}, Preview UGC: {Colors.BLUE}{details.hcontent_preview}{Colors.NORMAL} -{Colors.DARKBLUE} {SteamDB.GetPublishedFileRawUrl(details.publishedfileid)}");
Esempio n. 4
0
        public async Task <PublishedFileDetails> GetPublishedFileDetailsAsync(PublishedFileId publishedFileId)
        {
            var request = new CPublishedFile_GetDetails_Request();

            request.publishedfileids.Add(publishedFileId);

            var result = await PublishedFileService.SendMessage(api => api.GetDetails(request));

            if (result.Result == EResult.OK)
            {
                var details = result.GetDeserializedResponse <CPublishedFile_GetDetails_Response>().publishedfiledetails.First();

                return(details);
            }

            throw new SteamPublishedFileDetailsFetchException(result.Result);
        }
Esempio n. 5
0
        public void OnMessage(CommandArguments command)
        {
            var matches = SharedFileMatch.Matches(command.Message);

            foreach (Match match in matches)
            {
                var pubFileId      = ulong.Parse(match.Groups["pubfileid"].Value);
                var pubFileRequest = new CPublishedFile_GetDetails_Request();

                pubFileRequest.publishedfileids.Add(pubFileId);

                JobManager.AddJob(
                    () => PublishedFiles.SendMessage(api => api.GetDetails(pubFileRequest)),
                    new JobManager.IRCRequest
                {
                    Type    = JobManager.IRCRequestType.TYPE_PUBFILE_SILENT,
                    Command = command
                }
                    );
            }
        }
Esempio n. 6
0
        public override void OnCommand(CommandArguments command)
        {
            if (command.Message.Length == 0)
            {
                CommandHandler.ReplyToCommand(command, "Usage:{0} pubfile <pubfileid>", Colors.OLIVE);

                return;
            }

            ulong pubFileId;

            if (!ulong.TryParse(command.Message, out pubFileId))
            {
                CommandHandler.ReplyToCommand(command, "Invalid Published File ID");

                return;
            }

            var pubFileRequest = new CPublishedFile_GetDetails_Request
            {
                includeadditionalpreviews = true,
                includetags   = true,
                includekvtags = true,
                includevotes  = true,
                //includeforsaledata = true, // TODO: Needs updated steamkit
            };

            pubFileRequest.publishedfileids.Add(pubFileId);

            JobManager.AddJob(
                () => PublishedFiles.SendMessage(api => api.GetDetails(pubFileRequest)),
                new JobManager.IRCRequest
            {
                Type    = JobManager.IRCRequestType.TYPE_PUBFILE,
                Command = command
            }
                );
        }
Esempio n. 7
0
        public JobID RequestUGC(ulong pubFile, Action <UGCJobResult> callback, object userData = null)
        {
            var pubFileRequest = new CPublishedFile_GetDetails_Request
            {
                includetags        = true,
                includekvtags      = true,
                includevotes       = true,
                includemetadata    = true,
                includeforsaledata = true,
            };

            pubFileRequest.publishedfileids.Add(pubFile);

            JobID jobId = Steam.Instance.PublishedFiles.SendMessage(api => api.GetDetails(pubFileRequest));

            var job = new UGCJob(callback);

            job.UserData = userData;

            ugcJobs[jobId] = job;

            return(jobId);
        }
        public async void OnMessage(CommandArguments command)
        {
            var matches = SharedFileMatch.Matches(command.Message);

            foreach (Match match in matches)
            {
                if (!ulong.TryParse(match.Groups["pubfileid"].Value, out var pubFileId))
                {
                    continue;
                }

                Log.WriteInfo("Link Expander", "Will look up pubfile {0} for {1}", pubFileId, command);

                var pubFileRequest = new CPublishedFile_GetDetails_Request
                {
                    includevotes = true,
                };

                pubFileRequest.publishedfileids.Add(pubFileId);

                PublishedFileDetails details;

                try
                {
                    var task = PublishedFiles.SendMessage(api => api.GetDetails(pubFileRequest));
                    task.Timeout = TimeSpan.FromSeconds(10);
                    var callback = await task;
                    var response = callback.GetDeserializedResponse <CPublishedFile_GetDetails_Response>();
                    details = response.publishedfiledetails.FirstOrDefault();
                }
                catch (Exception e)
                {
                    Log.WriteError("Link Expander", "Failed to get pubfile details: {0}", e.Message);

                    continue;
                }

                if (details == null || (EResult)details.result != EResult.OK)
                {
                    continue;
                }

                string title;

                if (!string.IsNullOrWhiteSpace(details.title))
                {
                    title = details.title;
                }
                else if (!string.IsNullOrEmpty(details.file_description))
                {
                    title = details.file_description;
                }
                else
                {
                    title = details.filename;
                }

                if (title.Length > 49)
                {
                    title = title.Substring(0, 49) + "…";
                }

                var votesUp   = details.vote_data?.votes_up ?? 0;
                var votesDown = details.vote_data?.votes_down ?? 0;

                IRC.Instance.SendReply(command.Recipient,
                                       string.Format("{0}» {1}{2} {3}{4}{5} for {6}{7}{8} ({9:N0} views, {10:N0} \ud83d\udc4d, {11:N0} \ud83d\udc4e)",
                                                     Colors.OLIVE,
                                                     Colors.NORMAL,
                                                     (EWorkshopFileType)details.file_type,
                                                     Colors.BLUE,
                                                     Utils.RemoveControlCharacters(title),
                                                     Colors.NORMAL,
                                                     Colors.BLUE,
                                                     Utils.LimitStringLength(Utils.RemoveControlCharacters(details.app_name)),
                                                     Colors.LIGHTGRAY,
                                                     details.views,
                                                     votesUp,
                                                     votesDown
                                                     ),
                                       false
                                       );
            }
        }
        public override async Task OnCommand(CommandArguments command)
        {
            if (command.Message.Length == 0)
            {
                command.Reply("Usage:{0} pubfile <pubfileid>", Colors.OLIVE);

                return;
            }

            if (!ulong.TryParse(command.Message, out var pubFileId))
            {
                command.Reply("Invalid Published File ID");

                return;
            }

            var pubFileRequest = new CPublishedFile_GetDetails_Request
            {
                includeadditionalpreviews = true,
                includechildren           = true,
                includetags        = true,
                includekvtags      = true,
                includevotes       = true,
                includeforsaledata = true,
                includemetadata    = true,
            };

            pubFileRequest.publishedfileids.Add(pubFileId);

            var task = PublishedFiles.SendMessage(api => api.GetDetails(pubFileRequest));

            task.Timeout = TimeSpan.FromSeconds(10);
            var callback = await task;
            var response = callback.GetDeserializedResponse <CPublishedFile_GetDetails_Response>();
            var details  = response.publishedfiledetails.FirstOrDefault();

            if (details == null)
            {
                command.Reply("Unable to make service request for published file info: the server returned no info");

                return;
            }

            var result = (EResult)details.result;

            if (result != EResult.OK)
            {
                command.Reply("Unable to get published file info: {0}{1}", Colors.RED, result);

                return;
            }

            var json = JsonConvert.SerializeObject(details, Formatting.Indented);

            File.WriteAllText(Path.Combine(Application.Path, "ugc", string.Format("{0}.json", details.publishedfileid)), json, Encoding.UTF8);

            command.Reply("{0}, Title: {1}{2}{3}, Creator: {4}{5}{6}, App: {7}{8}{9}{10}, File UGC: {11}{12}{13}, Preview UGC: {14}{15}{16} -{17} {18}",
                          (EWorkshopFileType)details.file_type,
                          Colors.BLUE, string.IsNullOrWhiteSpace(details.title) ? "[no title]" : details.title, Colors.NORMAL,
                          Colors.BLUE, new SteamID(details.creator).Render(true), Colors.NORMAL,
                          Colors.BLUE, details.creator_appid,
                          details.creator_appid == details.consumer_appid ? "" : string.Format(" (consumer {0})", details.consumer_appid),
                          Colors.NORMAL,
                          Colors.BLUE, details.hcontent_file, Colors.NORMAL,
                          Colors.BLUE, details.hcontent_preview, Colors.NORMAL,
                          Colors.DARKBLUE, SteamDB.GetUGCURL(details.publishedfileid)
                          );

            command.Notice("{0} - https://steamcommunity.com/sharedfiles/filedetails/?id={1}", details.file_url, details.publishedfileid);
        }
Esempio n. 10
0
        public async void OnMessage(CommandArguments command)
        {
            var matches = SharedFileMatch.Matches(command.Message);

            foreach (Match match in matches)
            {
                if (!ulong.TryParse(match.Groups["pubfileid"].Value, out var pubFileId))
                {
                    continue;
                }

                Log.WriteInfo("Link Expander", "Will look up pubfile {0} for {1}", pubFileId, command);

                var pubFileRequest = new CPublishedFile_GetDetails_Request
                {
                    includevotes = true,
                };

                pubFileRequest.publishedfileids.Add(pubFileId);

                PublishedFileDetails details;

                try
                {
                    var callback = await PublishedFiles.SendMessage(api => api.GetDetails(pubFileRequest));

                    var response = callback.GetDeserializedResponse <CPublishedFile_GetDetails_Response>();
                    details = response.publishedfiledetails.FirstOrDefault();
                }
                catch (Exception e)
                {
                    Log.WriteError("Link Expander", "Failed to get pubfile details: {0}", e.Message);

                    continue;
                }

                if (details == null || (EResult)details.result != EResult.OK)
                {
                    continue;
                }

                string title;

                if (!string.IsNullOrWhiteSpace(details.title))
                {
                    title = details.title;
                }
                else if (!string.IsNullOrEmpty(details.file_description))
                {
                    title = details.file_description;
                }
                else
                {
                    title = details.filename;
                }

                if (title.Length > 49)
                {
                    title = title.Substring(0, 49) + "…";
                }

                var votesUp   = details.vote_data?.votes_up ?? 0;
                var votesDown = details.vote_data?.votes_down ?? 0;

                if (command.CommandType == ECommandType.SteamChatRoom)
                {
                    Steam.Instance.Friends.SendChatRoomMessage(command.ChatRoomID, EChatEntryType.ChatMsg,
                                                               string.Format("» {0}: {1} for {2} ({3:N0} views, {4:N0} \ud83d\udc4d, {5:N0} \ud83d\udc4e){6}",
                                                                             (EWorkshopFileType)details.file_type,
                                                                             title,
                                                                             details.app_name,
                                                                             details.views,
                                                                             votesUp,
                                                                             votesDown,
                                                                             details.spoiler_tag ? " :retreat: SPOILER" : ""
                                                                             )
                                                               );
                }
                else
                {
                    IRC.Instance.SendReply(command.Recipient,
                                           string.Format("{0}» {1}{2} {3}{4}{5} for {6}{7}{8} ({9:N0} views, {10:N0} \ud83d\udc4d, {11:N0} \ud83d\udc4e)",
                                                         Colors.OLIVE,
                                                         Colors.NORMAL,
                                                         (EWorkshopFileType)details.file_type,
                                                         Colors.BLUE,
                                                         title,
                                                         Colors.NORMAL,
                                                         Colors.BLUE,
                                                         details.app_name,
                                                         Colors.LIGHTGRAY,
                                                         details.views,
                                                         votesUp,
                                                         votesDown
                                                         ),
                                           false
                                           );
                }
            }
        }
Esempio n. 11
0
        public async void OnMessage(CommandArguments command)
        {
            var matches = SharedFileMatch.Matches(command.Message);

            foreach (Match match in matches)
            {
                var pubFileId      = ulong.Parse(match.Groups["pubfileid"].Value);
                var pubFileRequest = new CPublishedFile_GetDetails_Request
                {
                    includevotes = true,
                };

                pubFileRequest.publishedfileids.Add(pubFileId);

                var callback = await PublishedFiles.SendMessage(api => api.GetDetails(pubFileRequest));

                var response = callback.GetDeserializedResponse <CPublishedFile_GetDetails_Response>();
                var details  = response.publishedfiledetails.FirstOrDefault();

                if (details == null || (EResult)details.result != EResult.OK)
                {
                    return; // TODO
                }

                string title;

                if (!string.IsNullOrWhiteSpace(details.title))
                {
                    title = details.title;
                }
                else if (!string.IsNullOrEmpty(details.file_description))
                {
                    title = details.file_description;
                }
                else
                {
                    title = details.filename;
                }

                if (title.Length > 49)
                {
                    title = title.Substring(0, 49) + "…";
                }

                var votesUp   = details.vote_data != null ? details.vote_data.votes_up : 0;
                var votesDown = details.vote_data != null ? details.vote_data.votes_down : 0;

                if (command.CommandType == ECommandType.SteamChatRoom)
                {
                    Steam.Instance.Friends.SendChatRoomMessage(command.ChatRoomID, EChatEntryType.ChatMsg,
                                                               string.Format("» {0}: {1} for {2} ({3:N0} views, {4:N0} \ud83d\udc4d, {5:N0} \ud83d\udc4e){6}",
                                                                             (EWorkshopFileType)details.file_type,
                                                                             title,
                                                                             details.app_name,
                                                                             details.views,
                                                                             votesUp,
                                                                             votesDown,
                                                                             details.spoiler_tag ? " :retreat: SPOILER" : ""
                                                                             )
                                                               );
                }
                else
                {
                    IRC.Instance.SendReply(command.Recipient,
                                           string.Format("{0}» {1}{2} {3}{4}{5} for {6}{7}{8} ({9:N0} views, {10:N0} \ud83d\udc4d, {11:N0} \ud83d\udc4e)",
                                                         Colors.OLIVE,
                                                         Colors.NORMAL,
                                                         (EWorkshopFileType)details.file_type,
                                                         Colors.BLUE,
                                                         title,
                                                         Colors.NORMAL,
                                                         Colors.BLUE,
                                                         details.app_name,
                                                         Colors.LIGHTGRAY,
                                                         details.views,
                                                         votesUp,
                                                         votesDown
                                                         ),
                                           false
                                           );
                }

                break; // TODO: Fix this (can't really await in a foreach)
            }
        }