From dbba88809d288354b104fb98640a13437ca01434 Mon Sep 17 00:00:00 2001 From: chr_ Date: Mon, 15 Jul 2024 12:36:42 +0800 Subject: [PATCH] feat --- ASFEnhance/ASFEnhance.cs | 32 +++++-- ASFEnhance/Data/Common/AddWishlistResponse.cs | 2 +- ASFEnhance/Data/Common/IgnoreGameResponse.cs | 15 +++ .../IPC/Controllers/WishlistController.cs | 4 +- ASFEnhance/WishList/Command.cs | 95 ++++++++++--------- ASFEnhance/WishList/WebRequest.cs | 61 +++++++----- Directory.Build.props | 2 +- README.en.md | 33 ++++--- README.md | 33 ++++--- README.ru.md | 19 ++-- 10 files changed, 176 insertions(+), 120 deletions(-) create mode 100644 ASFEnhance/Data/Common/IgnoreGameResponse.cs diff --git a/ASFEnhance/ASFEnhance.cs b/ASFEnhance/ASFEnhance.cs index 287918a4..efb4b4b9 100644 --- a/ASFEnhance/ASFEnhance.cs +++ b/ASFEnhance/ASFEnhance.cs @@ -991,10 +991,17 @@ public Task OnLoaded() //WishList "ADDWISHLIST" or "AW" when argLength > 2 && access >= EAccess.Master => - Wishlist.Command.ResponseAddWishlist(args[1], Utilities.GetArgsAsText(args, 2, ",")), + Wishlist.Command.ResponseAddWishlist(args[1], Utilities.GetArgsAsText(args, 2, ","), true), "ADDWISHLIST" or "AW" when access >= EAccess.Master => - Wishlist.Command.ResponseAddWishlist(bot, args[1]), + Wishlist.Command.ResponseAddWishlist(bot, args[1], true), + + "REMOVEWISHLIST" or + "RW" when argLength > 2 && access >= EAccess.Master => + Wishlist.Command.ResponseAddWishlist(args[1], Utilities.GetArgsAsText(args, 2, ","), false), + "REMOVEWISHLIST" or + "RW" when access >= EAccess.Master => + Wishlist.Command.ResponseAddWishlist(bot, args[1], false), "CHECK" or "CK" when argLength > 2 && access >= EAccess.Master => @@ -1010,13 +1017,6 @@ public Task OnLoaded() "FG" when access >= EAccess.Master => Wishlist.Command.ResponseFollowGame(bot, args[1], true), - "REMOVEWISHLIST" or - "RW" when argLength > 2 && access >= EAccess.Master => - Wishlist.Command.ResponseRemoveWishlist(args[1], Utilities.GetArgsAsText(args, 2, ",")), - "REMOVEWISHLIST" or - "RW" when access >= EAccess.Master => - Wishlist.Command.ResponseRemoveWishlist(bot, args[1]), - "UNFOLLOWGAME" or "UFG" when argLength > 2 && access >= EAccess.Master => Wishlist.Command.ResponseFollowGame(args[1], Utilities.GetArgsAsText(args, 2, ","), false), @@ -1024,6 +1024,20 @@ public Task OnLoaded() "UFG" when access >= EAccess.Master => Wishlist.Command.ResponseFollowGame(bot, args[1], false), + "IGNOREGAME" or + "IG" when argLength > 2 && access >= EAccess.Master => + Wishlist.Command.ResponseIgnoreGame(args[1], Utilities.GetArgsAsText(args, 2, ","), true), + "IGNOREGAME" or + "IG" when access >= EAccess.Master => + Wishlist.Command.ResponseIgnoreGame(bot, args[1], true), + + "REMOVEIGNOREGAME" or + "RIG" when argLength > 2 && access >= EAccess.Master => + Wishlist.Command.ResponseIgnoreGame(args[1], Utilities.GetArgsAsText(args, 2, ","), false), + "REMOVEIGNOREGAME" or + "RIG" when access >= EAccess.Master => + Wishlist.Command.ResponseIgnoreGame(bot, args[1], false), + //Inventory "STACKINVENTORY" or "STACKINV" or diff --git a/ASFEnhance/Data/Common/AddWishlistResponse.cs b/ASFEnhance/Data/Common/AddWishlistResponse.cs index d98282d5..517662a0 100644 --- a/ASFEnhance/Data/Common/AddWishlistResponse.cs +++ b/ASFEnhance/Data/Common/AddWishlistResponse.cs @@ -1,4 +1,4 @@ -using System.Text.Json.Serialization; +using System.Text.Json.Serialization; namespace ASFEnhance.Data.Common; diff --git a/ASFEnhance/Data/Common/IgnoreGameResponse.cs b/ASFEnhance/Data/Common/IgnoreGameResponse.cs new file mode 100644 index 00000000..c1bf94c1 --- /dev/null +++ b/ASFEnhance/Data/Common/IgnoreGameResponse.cs @@ -0,0 +1,15 @@ +using System.Text.Json.Serialization; + +namespace ASFEnhance.Data.Common; + +/// +/// 添加愿望单响应 +/// +public record IgnoreGameResponse +{ + /// + /// 结果 + /// + [JsonPropertyName("success")] + public bool Result { get; set; } +} \ No newline at end of file diff --git a/ASFEnhance/IPC/Controllers/WishlistController.cs b/ASFEnhance/IPC/Controllers/WishlistController.cs index 5b00a04f..e8dd2b99 100644 --- a/ASFEnhance/IPC/Controllers/WishlistController.cs +++ b/ASFEnhance/IPC/Controllers/WishlistController.cs @@ -62,7 +62,7 @@ public async Task> AddWishlist(string botNames, [F { if (!bot.IsConnectedAndLoggedOn) { return (bot.BotName, false); } - var result = await Wishlist.WebRequest.AddWishlist(bot, appid).ConfigureAwait(false); + var result = await Wishlist.WebRequest.AddWishlist(bot, appid, true).ConfigureAwait(false); return (bot.BotName, result?.Result == true); } )).ConfigureAwait(false); @@ -122,7 +122,7 @@ public async Task> RemoveWishlist(string botNames, { if (!bot.IsConnectedAndLoggedOn) { return (bot.BotName, false); } - var result = await Wishlist.WebRequest.RemoveWishlist(bot, appid).ConfigureAwait(false); + var result = await Wishlist.WebRequest.AddWishlist(bot, appid, false).ConfigureAwait(false); return (bot.BotName, result?.Result == true); } )).ConfigureAwait(false); diff --git a/ASFEnhance/WishList/Command.cs b/ASFEnhance/WishList/Command.cs index c7de7138..a59f75e0 100644 --- a/ASFEnhance/WishList/Command.cs +++ b/ASFEnhance/WishList/Command.cs @@ -12,9 +12,10 @@ internal static class Command /// /// /// + /// /// /// - internal static async Task ResponseAddWishlist(Bot bot, string targetGameIds) + internal static async Task ResponseAddWishlist(Bot bot, string targetGameIds, bool isAddWishlist) { if (string.IsNullOrEmpty(targetGameIds)) { @@ -38,7 +39,7 @@ internal static class Command continue; } - var result = await bot.AddWishlist(gameId).ConfigureAwait(false); + var result = await bot.AddWishlist(gameId, isAddWishlist).ConfigureAwait(false); response.AppendLine(bot.FormatBotResponse(Strings.BotAddLicense, gameId, result?.Result == true ? Langs.Success : Langs.Failure)); } @@ -51,9 +52,10 @@ internal static class Command /// /// /// + /// /// /// - internal static async Task ResponseAddWishlist(string botNames, string targetGameIds) + internal static async Task ResponseAddWishlist(string botNames, string targetGameIds, bool isAddWishlist) { if (string.IsNullOrEmpty(botNames)) { @@ -72,7 +74,7 @@ internal static class Command return FormatStaticResponse(Strings.BotNotFound, botNames); } - var results = await Utilities.InParallel(bots.Select(bot => ResponseAddWishlist(bot, targetGameIds))).ConfigureAwait(false); + var results = await Utilities.InParallel(bots.Select(bot => ResponseAddWishlist(bot, targetGameIds, isAddWishlist))).ConfigureAwait(false); var responses = new List(results.Where(result => !string.IsNullOrEmpty(result))); @@ -80,13 +82,14 @@ internal static class Command } /// - /// 删除愿望单 + /// 关注游戏 /// /// /// + /// /// /// - internal static async Task ResponseRemoveWishlist(Bot bot, string targetGameIds) + internal static async Task ResponseFollowGame(Bot bot, string targetGameIds, bool isFollow) { if (string.IsNullOrEmpty(targetGameIds)) { @@ -110,22 +113,23 @@ internal static class Command continue; } - var result = await bot.RemoveWishlist(gameId).ConfigureAwait(false); + bool result = await bot.FollowGame(gameId, isFollow).ConfigureAwait(false); - response.AppendLine(bot.FormatBotResponse(Strings.BotAddLicense, gameId, result?.Result == true ? Langs.Success : Langs.Failure)); + response.AppendLine(bot.FormatBotResponse(Strings.BotAddLicense, gameId, result ? Langs.Success : Langs.Failure)); } return response.Length > 0 ? response.ToString() : null; } /// - /// 删除愿望单 (多个Bot) + /// 关注游戏 (多个Bot) /// /// /// + /// /// /// - internal static async Task ResponseRemoveWishlist(string botNames, string targetGameIds) + internal static async Task ResponseFollowGame(string botNames, string targetGameIds, bool isFollow) { if (string.IsNullOrEmpty(botNames)) { @@ -144,22 +148,22 @@ internal static class Command return FormatStaticResponse(Strings.BotNotFound, botNames); } - var results = await Utilities.InParallel(bots.Select(bot => ResponseRemoveWishlist(bot, targetGameIds))).ConfigureAwait(false); + var results = await Utilities.InParallel(bots.Select(bot => ResponseFollowGame(bot, targetGameIds, isFollow))).ConfigureAwait(false); var responses = new List(results.Where(result => !string.IsNullOrEmpty(result))); return responses.Count > 0 ? string.Join(Environment.NewLine, responses) : null; } + /// - /// 关注游戏 + /// 检查游戏拥有/愿望单/关注 /// /// /// - /// /// /// - internal static async Task ResponseFollowGame(Bot bot, string targetGameIds, bool isFollow) + internal static async Task ResponseCheckGame(Bot bot, string targetGameIds) { if (string.IsNullOrEmpty(targetGameIds)) { @@ -171,35 +175,43 @@ internal static class Command return bot.FormatBotResponse(Strings.BotNotConnected); } - var response = new StringBuilder(); + var sb = new StringBuilder(); + sb.AppendLine(bot.FormatBotResponse(Langs.MultipleLineResult)); + sb.AppendLine(Langs.CheckGameListTitle); - string[] games = targetGameIds.Split(SeparatorDot, StringSplitOptions.RemoveEmptyEntries); + var games = targetGameIds.Split(SeparatorDot, StringSplitOptions.RemoveEmptyEntries); foreach (string game in games) { if (!uint.TryParse(game, out uint gameId) || (gameId == 0)) { - response.AppendLine(bot.FormatBotResponse(Strings.ErrorIsInvalid, nameof(gameId))); + sb.AppendLineFormat(Langs.CheckGameItemError, game); continue; } - bool result = await bot.FollowGame(gameId, isFollow).ConfigureAwait(false); + var result = await bot.CheckGame(gameId).ConfigureAwait(false); - response.AppendLine(bot.FormatBotResponse(Strings.BotAddLicense, gameId, result ? Langs.Success : Langs.Failure)); + if (result != null && result.Success) + { + sb.AppendLineFormat(Langs.CheckGameItemSuccess, gameId, result.Name, result.Owned ? "√" : "×", result.InWishlist ? "√" : "×", result.IsFollow ? "√" : "×"); + } + else + { + sb.AppendLineFormat(Langs.CheckGameItemFailed, gameId, result?.Name ?? gameId.ToString()); + } } - return response.Length > 0 ? response.ToString() : null; + return sb.ToString(); } /// - /// 关注游戏 (多个Bot) + /// 检查游戏拥有/愿望单/关注 (多个Bot) /// /// /// - /// /// /// - internal static async Task ResponseFollowGame(string botNames, string targetGameIds, bool isFollow) + internal static async Task ResponseCheckGame(string botNames, string targetGameIds) { if (string.IsNullOrEmpty(botNames)) { @@ -218,22 +230,22 @@ internal static class Command return FormatStaticResponse(Strings.BotNotFound, botNames); } - var results = await Utilities.InParallel(bots.Select(bot => ResponseFollowGame(bot, targetGameIds, isFollow))).ConfigureAwait(false); + var results = await Utilities.InParallel(bots.Select(bot => ResponseCheckGame(bot, targetGameIds))).ConfigureAwait(false); var responses = new List(results.Where(result => !string.IsNullOrEmpty(result))); return responses.Count > 0 ? string.Join(Environment.NewLine, responses) : null; } - /// - /// 检查游戏拥有/愿望单/关注 + /// 关注游戏 /// /// /// + /// /// /// - internal static async Task ResponseCheckGame(Bot bot, string targetGameIds) + internal static async Task ResponseIgnoreGame(Bot bot, string targetGameIds, bool isIgnore) { if (string.IsNullOrEmpty(targetGameIds)) { @@ -245,43 +257,35 @@ internal static class Command return bot.FormatBotResponse(Strings.BotNotConnected); } - var sb = new StringBuilder(); - sb.AppendLine(bot.FormatBotResponse(Langs.MultipleLineResult)); - sb.AppendLine(Langs.CheckGameListTitle); + var response = new StringBuilder(); - var games = targetGameIds.Split(SeparatorDot, StringSplitOptions.RemoveEmptyEntries); + string[] games = targetGameIds.Split(SeparatorDot, StringSplitOptions.RemoveEmptyEntries); foreach (string game in games) { if (!uint.TryParse(game, out uint gameId) || (gameId == 0)) { - sb.AppendLineFormat(Langs.CheckGameItemError, game); + response.AppendLine(bot.FormatBotResponse(Strings.ErrorIsInvalid, nameof(gameId))); continue; } - var result = await bot.CheckGame(gameId).ConfigureAwait(false); + bool result = await bot.IgnoreGame(gameId, isIgnore).ConfigureAwait(false); - if (result != null && result.Success) - { - sb.AppendLineFormat(Langs.CheckGameItemSuccess, gameId, result.Name, result.Owned ? "√" : "×", result.InWishlist ? "√" : "×", result.IsFollow ? "√" : "×"); - } - else - { - sb.AppendLineFormat(Langs.CheckGameItemFailed, gameId, result?.Name ?? gameId.ToString()); - } + response.AppendLine(bot.FormatBotResponse(Strings.BotAddLicense, gameId, result ? Langs.Success : Langs.Failure)); } - return sb.ToString(); + return response.Length > 0 ? response.ToString() : null; } /// - /// 检查游戏拥有/愿望单/关注 (多个Bot) + /// 关注游戏 (多个Bot) /// /// /// + /// /// /// - internal static async Task ResponseCheckGame(string botNames, string targetGameIds) + internal static async Task ResponseIgnoreGame(string botNames, string targetGameIds, bool isIgnore) { if (string.IsNullOrEmpty(botNames)) { @@ -300,11 +304,10 @@ internal static class Command return FormatStaticResponse(Strings.BotNotFound, botNames); } - var results = await Utilities.InParallel(bots.Select(bot => ResponseCheckGame(bot, targetGameIds))).ConfigureAwait(false); + var results = await Utilities.InParallel(bots.Select(bot => ResponseIgnoreGame(bot, targetGameIds, isIgnore))).ConfigureAwait(false); var responses = new List(results.Where(result => !string.IsNullOrEmpty(result))); return responses.Count > 0 ? string.Join(Environment.NewLine, responses) : null; } - } diff --git a/ASFEnhance/WishList/WebRequest.cs b/ASFEnhance/WishList/WebRequest.cs index d83267af..e659b85d 100644 --- a/ASFEnhance/WishList/WebRequest.cs +++ b/ASFEnhance/WishList/WebRequest.cs @@ -12,9 +12,9 @@ internal static class WebRequest /// /// /// - internal static async Task AddWishlist(this Bot bot, uint gameId) + internal static async Task AddWishlist(this Bot bot, uint gameId, bool isAddWishlist) { - var request = new Uri(SteamStoreURL, "/api/addtowishlist"); + var request = new Uri(SteamStoreURL, isAddWishlist ? "/api/addtowishlist" : "/api/removefromwishlist"); var referer = new Uri(SteamStoreURL, "/app/" + gameId); var data = new Dictionary(2, StringComparer.Ordinal) @@ -22,27 +22,7 @@ internal static class WebRequest { "appid", gameId.ToString() }, }; - var response = await bot.ArchiWebHandler.UrlPostToJsonObjectWithSession(request, data: data, referer: referer).ConfigureAwait(false); - return response?.Content; - } - - /// - /// 删除愿望单 - /// - /// - /// - /// - internal static async Task RemoveWishlist(this Bot bot, uint gameId) - { - var request = new Uri(SteamStoreURL, "/api/removefromwishlist"); - var referer = new Uri(SteamStoreURL, $"/app/{gameId}"); - - var data = new Dictionary(2, StringComparer.Ordinal) - { - { "appid", gameId.ToString() }, - }; - - var response = await bot.ArchiWebHandler.UrlPostToJsonObjectWithSession(request, data: data, referer: referer).ConfigureAwait(false); + var response = await bot.ArchiWebHandler.UrlPostToJsonObjectWithSession(request, data: data, referer: referer).ConfigureAwait(false); return response?.Content; } @@ -101,6 +81,41 @@ internal static async Task CheckGame(this Bot bot, uint gameI } return HtmlParser.ParseStorePage(response); + } + + /// + /// 忽略指定游戏 + /// + /// + /// + /// + /// + internal static async Task IgnoreGame(this Bot bot, uint gameId, bool isIgnore) + { + var request = new Uri(SteamStoreURL, "/recommended/ignorerecommendation/"); + var referer = new Uri(SteamStoreURL, $"/app/{gameId}"); + + var data = new Dictionary(3, StringComparer.Ordinal) + { + { "appid", gameId.ToString() }, + }; + + if (isIgnore) + { + data.Add("ignore_reason", "0"); + } + else + { + data.Add("remove", "1"); + } + + var response = await bot.ArchiWebHandler.UrlPostToJsonObjectWithSession(request, data: data, referer: referer).ConfigureAwait(false); + + if (response == null) + { + return false; + } + return response?.Content?.Result == true; } } diff --git a/Directory.Build.props b/Directory.Build.props index 572e8ad6..b9abdbb4 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,6 +1,6 @@ - 2.1.11.1 + 2.1.12.0 diff --git a/README.en.md b/README.en.md index f815dda0..1b6fe108 100644 --- a/README.en.md +++ b/README.en.md @@ -81,14 +81,14 @@ Command: `UPDATEPLUGINS stable ASFEnhance` --- -| Command | Shorthand | Access | Description | -| ------------------------------ | --------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -| `PLUGINSLIST` | `PL` | `Operator` | Get the list of currently installed plugins. Those with [] at the end are submodules that can be managed by ASFEnhance. | -| `PLUGINLIST` | - | `Operator` | Same function as `PLUGINSLIST` | -| `PLUGINSVERSION [Plugin Name]` | `PV` | `Master` | Get the version information of the specified plugin. If the plugin name is not specified, check the version information of all supported plugins. | -| `PLUGINVERSION` | - | `Master` | Same function as `PLUGINSVERSION` | -| `PLUGINSUPDATE [Plugin Name]` | `PU` | `Master` | Automatically update the specified plugin(s), and automatically update all supported plugins if no plugin name is specified. (Require ASF-generic) | -| `PLUGINUPDATE` | - | `Master` | Same function as `PLUGINSUPDATE` | +| Command | Shorthand | Access | Description | +| ------------------------------ | --------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| `PLUGINSLIST` | `PL` | `Operator` | Get the list of currently installed plugins. Those with [] at the end are submodules that can be managed by ASFEnhance. | +| `PLUGINLIST` | - | `Operator` | Same function as `PLUGINSLIST` | +| `PLUGINSVERSION [Plugin Name]` | `PV` | `Master` | Get the version information of the specified plugin. If the plugin name is not specified, check the version information of all supported plugins. | +| `PLUGINVERSION` | - | `Master` | Same function as `PLUGINSVERSION` | +| `PLUGINSUPDATE [Plugin Name]` | `PU` | `Master` | Automatically update the specified plugin(s), and automatically update all supported plugins if no plugin name is specified. | +| `PLUGINUPDATE` | - | `Master` | Same function as `PLUGINSUPDATE` | ### Donate @@ -109,6 +109,7 @@ Command: `UPDATEPLUGINS stable ASFEnhance` | ASFEnhance Version | Depended ASF Version | Description | | ---------------------------------------------------------------------- | :------------------: | -------------------------------------------------------- | +| [2.1.12.0](https://github.com/chr233/ASFEnhance/releases/tag/2.1.12.0) | 6.0.4.4 | 改进翻译, 新增 `IGNOREGAME` 命令 | | [2.1.11.0](https://github.com/chr233/ASFEnhance/releases/tag/2.1.11.0) | 6.0.4.4 | 改进翻译, 新增 `REGISTEDATE` 命令 | | [2.1.10.3](https://github.com/chr233/ASFEnhance/releases/tag/2.1.10.3) | 6.0.4.4 | ASF -> 6.0.4.4, 改进翻译, 新增 `CRAFTSPECIFYBADGES` 命令 | | [2.1.9.2](https://github.com/chr233/ASFEnhance/releases/tag/2.1.9.2) | 6.0.3.4 | 新增 `DL2` 命令, 移除失效命令 | @@ -452,13 +453,15 @@ All avatars are from [Game Avatars Page](https://steamcommunity.com/actions/Game ### Wishlist Commands -| Command | Shorthand | Access | Description | -| -------------------------------- | --------- | -------- | ------------------------------------------------------------ | -| `ADDWISHLIST [Bots] ` | `AW` | `Master` | Add the game to the bots wishlist | -| `REMOVEWISHLIST [Bots] ` | `RW` | `Master` | Delete the game from the bots wishlist | -| `FOLLOWGAME [Bots] ` | `FG` | `Master` | Follow the specified game | -| `UNFOLLOWGAME [Bots] ` | `UFG` | `Master` | Unfollow the specified game | -| `CHECK [Bots] ` | `CK` | `Master` | Check if bot is following / or has wishlisted specified game | +| Command | Shorthand | Access | Description | +| ---------------------------------- | --------- | -------- | ------------------------------------------------------------ | +| `ADDWISHLIST [Bots] ` | `AW` | `Master` | Add the game to the bots wishlist | +| `REMOVEWISHLIST [Bots] ` | `RW` | `Master` | Delete the game from the bots wishlist | +| `FOLLOWGAME [Bots] ` | `FG` | `Master` | Follow the specified game | +| `UNFOLLOWGAME [Bots] ` | `UFG` | `Master` | Unfollow the specified game | +| `CHECK [Bots] ` | `CK` | `Master` | Check if bot is following / or has wishlisted specified game | +| `IGNOREGAME [Bots] ` | `IG` | `Master` | Ignore game | +| `REMOVEIGNOREGAME [Bots] ` | `RIG` | `Master` | Cancel ignore game | ### Store Commands diff --git a/README.md b/README.md index 0cd222dc..fbd9b28d 100644 --- a/README.md +++ b/README.md @@ -84,14 +84,14 @@ ASFEnhance 介绍 & 使用指南: [https://keylol.com/t804841-1-1](https://keylo --- -| 命令 | 缩写 | 权限 | 说明 | -| ------------------------- | ---- | ---------- | ----------------------------------------------------------------------------------- | -| `PLUGINSLIST` | `PL` | `Operator` | 获取当前安装的插件列表, 末尾带 [] 的为可被 ASFEnhance 管理的子模块 | -| `PLUGINLIST` | - | `Operator` | 同 `PLUGINSLIST` | -| `PLUGINSVERSION [插件名]` | `PV` | `Master` | 获取指定模块的版本信息, 未指定插件名时检查所有受支持的插件的版本信息 | -| `PLUGINVERSION` | - | `Master` | 同 `PLUGINSVERSION` | -| `PLUGINSUPDATE [插件名]` | `PU` | `Master` | 自动更新指定模块, 未指定插件名时自动更新所有受支持的插件, 需要 ASF-generic 才能使用 | -| `PLUGINUPDATE` | - | `Master` | 同 `PLUGINSUPDATE` | +| 命令 | 缩写 | 权限 | 说明 | +| ------------------------- | ---- | ---------- | -------------------------------------------------------------------- | +| `PLUGINSLIST` | `PL` | `Operator` | 获取当前安装的插件列表, 末尾带 [] 的为可被 ASFEnhance 管理的子模块 | +| `PLUGINLIST` | - | `Operator` | 同 `PLUGINSLIST` | +| `PLUGINSVERSION [插件名]` | `PV` | `Master` | 获取指定模块的版本信息, 未指定插件名时检查所有受支持的插件的版本信息 | +| `PLUGINVERSION` | - | `Master` | 同 `PLUGINSVERSION` | +| `PLUGINSUPDATE [插件名]` | `PU` | `Master` | 自动更新指定模块, 未指定插件名时自动更新所有受支持的插件 | +| `PLUGINUPDATE` | - | `Master` | 同 `PLUGINSUPDATE` | ### 捐赠 @@ -112,6 +112,7 @@ ASFEnhance 介绍 & 使用指南: [https://keylol.com/t804841-1-1](https://keylo | ASFEnhance 版本 | 适配 ASF 版本 | 更新说明 | | ---------------------------------------------------------------------- | :-----------: | -------------------------------------------------------- | +| [2.1.12.0](https://github.com/chr233/ASFEnhance/releases/tag/2.1.12.0) | 6.0.4.4 | 改进翻译, 新增 `IGNOREGAME` 命令 | | [2.1.11.0](https://github.com/chr233/ASFEnhance/releases/tag/2.1.11.0) | 6.0.4.4 | 改进翻译, 新增 `REGISTEDATE` 命令 | | [2.1.10.3](https://github.com/chr233/ASFEnhance/releases/tag/2.1.10.3) | 6.0.4.4 | ASF -> 6.0.4.4, 改进翻译, 新增 `CRAFTSPECIFYBADGES` 命令 | | [2.1.9.2](https://github.com/chr233/ASFEnhance/releases/tag/2.1.9.2) | 6.0.3.4 | 新增 `DL2` 命令, 移除失效命令 | @@ -456,13 +457,15 @@ ASF.json ### 愿望单相关 -| 命令 | 缩写 | 权限 | 说明 | -| -------------------------------- | ----- | -------- | ----------------------- | -| `ADDWISHLIST [Bots] ` | `AW` | `Master` | 添加愿望单 | -| `REMOVEWISHLIST [Bots] ` | `RW` | `Master` | 移除愿望单 | -| `FOLLOWGAME [Bots] ` | `FG` | `Master` | 关注游戏 | -| `UNFOLLOWGAME [Bots] ` | `UFG` | `Master` | 取消关注游戏 | -| `CHECK [Bots] ` | `CK` | `Master` | 检查游戏关注/愿望单情况 | +| 命令 | 缩写 | 权限 | 说明 | +| ---------------------------------- | ----- | -------- | ----------------------- | +| `ADDWISHLIST [Bots] ` | `AW` | `Master` | 添加愿望单 | +| `REMOVEWISHLIST [Bots] ` | `RW` | `Master` | 移除愿望单 | +| `FOLLOWGAME [Bots] ` | `FG` | `Master` | 关注游戏 | +| `UNFOLLOWGAME [Bots] ` | `UFG` | `Master` | 取消关注游戏 | +| `CHECK [Bots] ` | `CK` | `Master` | 检查游戏关注/愿望单情况 | +| `IGNOREGAME [Bots] ` | `IG` | `Master` | 忽略游戏 | +| `REMOVEIGNOREGAME [Bots] ` | `RIG` | `Master` | 取消忽略游戏 | ### 商店相关 diff --git a/README.ru.md b/README.ru.md index e91f85e7..0a77e1e4 100644 --- a/README.ru.md +++ b/README.ru.md @@ -85,7 +85,7 @@ Command: `UPDATEPLUGINS stable ASFEnhance` | `PLUGINLIST` | - | `Operator` | То же, что и `PLUGINSLIST` | | `PLUGINSVERSION [PluginName]` | `PV` | `Master` | Получение информации о версии указанного модуля, а также проверка информации о версии всех поддерживаемых плагинов, если имя плагина не указано | | `PLUGINVERSION` | - | `Master` | То же, что и `PLUGINSVERSION` | -| `PLUGINSUPDATE [PluginName]` | `PU` | `Master` | Автоматическое обновление всех поддерживаемых плагинов без указания имени плагина (Require ASF-generic) | +| `PLUGINSUPDATE [PluginName]` | `PU` | `Master` | Автоматическое обновление всех поддерживаемых плагинов без указания имени плагина | | `PLUGINUPDATE` | - | `Master` | То же, что и `PLUGINSUPDATE` | ### Donate @@ -107,6 +107,7 @@ Command: `UPDATEPLUGINS stable ASFEnhance` | Версия ASFEnhance | Совместимая версия ASF | Описание | | ---------------------------------------------------------------------- | :--------------------: | -------------------------------------------------------- | +| [2.1.12.0](https://github.com/chr233/ASFEnhance/releases/tag/2.1.12.0) | 6.0.4.4 | 改进翻译, 新增 `IGNOREGAME` 命令 | | [2.1.11.0](https://github.com/chr233/ASFEnhance/releases/tag/2.1.11.0) | 6.0.4.4 | 改进翻译, 新增 `REGISTEDATE` 命令 | | [2.1.10.3](https://github.com/chr233/ASFEnhance/releases/tag/2.1.10.3) | 6.0.4.4 | ASF -> 6.0.4.4, 改进翻译, 新增 `CRAFTSPECIFYBADGES` 命令 | | [2.1.9.2](https://github.com/chr233/ASFEnhance/releases/tag/2.1.9.2) | 6.0.3.4 | 新增 `DL2` 命令, 移除失效命令 | @@ -444,13 +445,15 @@ ASF.json ### Команды Списка Желаний -| Команда | Сокращение | Доступ | Описание | -| -------------------------------- | ---------- | -------- | -------------------------------------------------------------- | -| `ADDWISHLIST [Bots] ` | `AW` | `Master` | Добавить боту игру в список желаемого | -| `REMOVEWISHLIST [Bots] ` | `RW` | `Master` | Убрать у бота игру из списка желаемого | -| `FOLLOWGAME [Bots] ` | `FG` | `Master` | Подписаться на определённую игру | -| `UNFOLLOWGAME [Bots] ` | `UFG` | `Master` | Отписаться от определённой игры | -| `CHECK [Bots] ` | `CK` | `Master` | Проверить наличие игры в библиотеке/списке желаемого/подписках | +| Команда | Сокращение | Доступ | Описание | +| ---------------------------------- | ---------- | -------- | -------------------------------------------------------------- | +| `ADDWISHLIST [Bots] ` | `AW` | `Master` | Добавить боту игру в список желаемого | +| `REMOVEWISHLIST [Bots] ` | `RW` | `Master` | Убрать у бота игру из списка желаемого | +| `FOLLOWGAME [Bots] ` | `FG` | `Master` | Подписаться на определённую игру | +| `UNFOLLOWGAME [Bots] ` | `UFG` | `Master` | Отписаться от определённой игры | +| `CHECK [Bots] ` | `CK` | `Master` | Проверить наличие игры в библиотеке/списке желаемого/подписках | +| `IGNOREGAME [Bots] ` | `IG` | `Master` | Ignore game | +| `REMOVEIGNOREGAME [Bots] ` | `RIG` | `Master` | Cancel ignore game | ### Команды Магазина