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); }
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); }
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)}");
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); }
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 } ); } }
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 } ); }
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); }
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 ); } } }
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) } }