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 |
### Команды Магазина