Skip to content

Commit 93573a4

Browse files
committed
feat 添加 Market相关命令
1 parent 944e0d1 commit 93573a4

11 files changed

Lines changed: 120 additions & 34 deletions

File tree

ASFEnhance/ASFEnhance.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -818,14 +818,16 @@ public Task OnLoaded()
818818
"MARKETORDERS" when argLength > 2 && access >= EAccess.Operator =>
819819
Market.Command.ResponseGetMarketOrders(Utilities.GetArgsAsText(args, 1, ",")),
820820

821-
"MARKETBUY" when argLength == 5 && access >= EAccess.Operator =>
821+
"MARKETBUY" when argLength == 5 && access >= EAccess.Master =>
822822
Market.Command.ResponseBuyMarketItem(args[1], args[2], args[3], args[4]),
823-
"MARKETBUY" when argLength == 4 && access >= EAccess.Operator =>
824-
Market.Command.ResponseBuyMarketItem(bot, args[1], args[2], args[3]),
823+
"MARKETBUY" when argLength == 4 && access >= EAccess.Master =>
824+
Market.Command.ResponseBuyMarketItem(args[1], args[2], args[3], "1"),
825+
"MARKETBUY" when argLength == 3 && access >= EAccess.Master =>
826+
Market.Command.ResponseBuyMarketItem(bot, args[1], args[2], "1"),
825827

826-
"MARKETCANCEL" when argLength > 2 && access >= EAccess.Operator =>
828+
"MARKETCANCEL" when argLength > 2 && access >= EAccess.Master =>
827829
Market.Command.ResponseCancelOrder(args[1], Utilities.GetArgsAsText(args, 2, ",")),
828-
"MARKETCANCEL" when access >= EAccess.Operator =>
830+
"MARKETCANCEL" when access >= EAccess.Master =>
829831
Market.Command.ResponseCancelOrder(bot, args[1]),
830832

831833
//Friend

ASFEnhance/Data/WebApi/CreateBuyOrderResponse.cs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,21 @@ internal sealed record CreateBuyOrderResponse
88
[JsonPropertyName("success")]
99
public EResult Success { get; set; }
1010

11+
[JsonPropertyName("message")]
12+
public string? Message { get; set; }
13+
1114
[JsonPropertyName("buy_orderid")]
1215
public string? BuyOrderId { get; set; }
1316

1417
[JsonPropertyName("need_confirmation")]
1518
public bool NeedConfirmation { get; set; }
1619

17-
[JsonPropertyName("confirmation")]
18-
public ConfirmationData? Confirmation { get; set; }
20+
//[JsonPropertyName("confirmation")]
21+
//public ConfirmationData? Confirmation { get; set; }
1922

20-
public sealed record ConfirmationData
21-
{
22-
[JsonPropertyName("confirmation_id")]
23-
public string? ConfirmationId { get; set; }
24-
}
23+
//public sealed record ConfirmationData
24+
//{
25+
// [JsonPropertyName("confirmation_id")]
26+
// public string? ConfirmationId { get; set; }
27+
//}
2528
}

ASFEnhance/Market/Command.cs

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ internal static class Command
4343
sb.AppendLine(Langs.MultipleLineResult);
4444
sb.AppendLineFormat("物品名称: {0}", baseInfo.Name);
4545
sb.AppendLineFormat("物品Id: {0} - {1}", baseInfo.AppId, baseInfo.ItemId);
46-
sb.AppendLineFormat("Hash: {0}", baseInfo.HashName);
4746

4847
if (detail?.SellInfoList != null)
4948
{
@@ -122,30 +121,37 @@ internal static class Command
122121

123122
var baseInfo = await WebRequest.GetMarketInfo(bot, appId, marketHash).ConfigureAwait(false);
124123

125-
if (baseInfo == null)
124+
if (string.IsNullOrEmpty(baseInfo?.HashName))
126125
{
127126
return bot.FormatBotResponse(Langs.NetworkError);
128127
}
129128

130-
var buyResponse = await WebRequest.CreateBuyOrder(bot, appId, marketHash, price, amount, bot.WalletCurrency, null).ConfigureAwait(false);
129+
var buyResponse = await WebRequest.CreateBuyOrder(bot, appId, baseInfo.HashName, price, amount, bot.WalletCurrency, null).ConfigureAwait(false);
131130

132131
if (buyResponse == null)
133132
{
134133
return bot.FormatBotResponse(Langs.NetworkError);
135134
}
136135

137-
if (buyResponse.Success == SteamKit2.EResult.Pending)
136+
if (buyResponse.Success == SteamKit2.EResult.OK)
138137
{
139-
return bot.FormatBotResponse("创建求购订单需要验证令牌。请在移动设备上确认订单, 或者使用 2FAOK");
140-
}
141-
142-
var sb = new StringBuilder();
138+
var sb = new StringBuilder();
143139

144-
sb.AppendLine(Langs.MultipleLineResult);
145-
sb.AppendLineFormat("物品名称: {0}", baseInfo.Name);
146-
sb.AppendLineFormat("求购Id: {0}", buyResponse.BuyOrderId);
140+
sb.AppendLine(Langs.MultipleLineResult);
141+
sb.AppendLineFormat("物品名称: {0}", baseInfo.Name);
142+
sb.AppendLineFormat("求购Id: {0}", buyResponse.BuyOrderId);
147143

148-
return bot.FormatBotResponse(sb.ToString());
144+
return bot.FormatBotResponse(sb.ToString());
145+
}
146+
else if (buyResponse.Success == SteamKit2.EResult.Pending)
147+
{
148+
return bot.FormatBotResponse("创建求购订单需要验证令牌。请在移动设备上确认订单, 或者使用 2FAOK");
149+
}
150+
else
151+
{
152+
var message = buyResponse?.Message ?? Langs.NetworkError;
153+
return bot.FormatBotResponse($"创建求购订单失败: {message}");
154+
}
149155
}
150156

151157
/// <summary>
@@ -262,7 +268,7 @@ internal static class Command
262268

263269
foreach (var entity in entities)
264270
{
265-
if (!long.TryParse(entity, out var orderId) || (orderId == 0))
271+
if (long.TryParse(entity, out var orderId) || (orderId == 0))
266272
{
267273
var response = await WebRequest.CancelBuyOrder(bot, orderId).ConfigureAwait(false);
268274

ASFEnhance/Market/WebRequest.cs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ internal static class WebRequest
5959
public static async Task<GetItemOrderListResponse?> GetMarketPriceInfo(Bot bot, string itemId, string country, ECurrencyCode currencyCode)
6060
{
6161
var request = new Uri(SteamCommunityURL, $"/market/itemordershistogram?country={country}&language={Langs.Language}&currency={(int)currencyCode}&item_nameid={itemId}");
62-
var response = await bot.ArchiWebHandler.UrlGetToJsonObjectWithSession<GetItemOrderListResponse>(request).ConfigureAwait(false);
62+
var referer = new Uri(SteamCommunityURL, $"/market/?l={Langs.Language}");
63+
64+
var response = await bot.ArchiWebHandler.UrlGetToJsonObjectWithSession<GetItemOrderListResponse>(request, referer: referer).ConfigureAwait(false);
6365

6466
var result = response?.Content;
6567

@@ -110,7 +112,7 @@ internal static class WebRequest
110112
/// <returns></returns>
111113
public static async Task<List<OrderInfoData>?> GetOrderList(Bot bot)
112114
{
113-
var request = new Uri(SteamCommunityURL, "/market/");
115+
var request = new Uri(SteamCommunityURL, $"/market/?l={Langs.Language}");
114116

115117
var response = await bot.ArchiWebHandler.UrlGetToHtmlDocumentWithSession(request).ConfigureAwait(false);
116118

@@ -132,9 +134,12 @@ internal static class WebRequest
132134
}
133135

134136
var orderId = match.Groups[1].Value;
137+
138+
ele.QuerySelector("span.market_listing_inline_buyorder_qty")?.TextContent = "";
139+
135140
var name = ele.QuerySelector("a.market_listing_item_name_link")?.TextContent?.Trim();
136-
var price = ele.QuerySelector("div:nth-of-type(2) span.market_listing_price")?.TextContent?.Trim();
137-
var amount = ele.QuerySelector("div:nth-of-type(3) span.market_listing_price")?.TextContent?.Trim();
141+
var price = ele.QuerySelector("div:nth-of-type(2)>span>span")?.TextContent?.Trim();
142+
var amount = ele.QuerySelector("div:nth-of-type(3)>span>span")?.TextContent?.Trim();
138143

139144
var item = new OrderInfoData(name, price, amount, orderId);
140145
result.Add(item);
@@ -157,6 +162,7 @@ internal static class WebRequest
157162
public static async Task<CreateBuyOrderResponse?> CreateBuyOrder(Bot bot, string appId, string marketHash, decimal price, int amount, ECurrencyCode currencyCode, string? confirmation)
158163
{
159164
var request = new Uri(SteamCommunityURL, "/market/createbuyorder/");
165+
var referer = new Uri(SteamCommunityURL, $"/market/listings/{appId}/{marketHash}");
160166

161167
var priceTotal = (price * amount * 100);
162168

@@ -172,7 +178,7 @@ internal static class WebRequest
172178
{ "confirmation", confirmation ?? "" },
173179
};
174180

175-
var response = await bot.ArchiWebHandler.UrlPostToJsonObjectWithSession<CreateBuyOrderResponse>(request, data: data, session: ArchiWebHandler.ESession.Lowercase).ConfigureAwait(false);
181+
var response = await bot.ArchiWebHandler.UrlPostToJsonObjectWithSession<CreateBuyOrderResponse>(request, data: data, referer: referer, session: ArchiWebHandler.ESession.Lowercase).ConfigureAwait(false);
176182

177183
return response?.Content;
178184
}
@@ -186,12 +192,13 @@ internal static class WebRequest
186192
public static async Task<CancelBuyOrderResponse?> CancelBuyOrder(Bot bot, long buyOrder)
187193
{
188194
var request = new Uri(SteamCommunityURL, "/market/cancelbuyorder/");
195+
var referer = new Uri(SteamCommunityURL, $"/market/?l={Langs.Language}");
189196

190197
Dictionary<string, string> data = new(2) {
191198
{ "buy_orderid", buyOrder.ToString() },
192199
};
193200

194-
var response = await bot.ArchiWebHandler.UrlPostToJsonObjectWithSession<CancelBuyOrderResponse>(request, data: data, session: ArchiWebHandler.ESession.Lowercase).ConfigureAwait(false);
201+
var response = await bot.ArchiWebHandler.UrlPostToJsonObjectWithSession<CancelBuyOrderResponse>(request, data: data, referer: referer, session: ArchiWebHandler.ESession.Lowercase).ConfigureAwait(false);
195202

196203
return response?.Content;
197204
}

ASFEnhance/RegexUtils.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,6 @@ internal static partial class RegexUtils
102102
public static partial Regex MatchMarketUrl();
103103
[GeneratedRegex(@"Market_LoadOrderSpread\( (\d+) \);")]
104104
public static partial Regex MatchMarketItemId();
105-
[GeneratedRegex(@"mybuyorder_(\d)+")]
105+
[GeneratedRegex(@"mybuyorder_(\d+)")]
106106
public static partial Regex MatchMarketOrderIt();
107107
}

ArchiSteamFarm

Submodule ArchiSteamFarm updated 272 files

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project>
22
<PropertyGroup>
3-
<Version>2.3.19.0</Version>
3+
<Version>2.3.20.0</Version>
44
</PropertyGroup>
55

66
<PropertyGroup>

README.en.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,9 @@ Command: `UPDATEPLUGINS stable ASFEnhance`
121121

122122
| ASFEnhance Version | Depended ASF Version | Description |
123123
| ---------------------------------------------------------------------- | :------------------: | ------------------------------------------------------------ |
124+
| [2.3.20.0](https://github.com/chr233/ASFEnhance/releases/tag/2.3.20.0) | 6.3.3.3 | ASF -> 6.3.3.3, 新增 `MARKET` 相关命令 |
125+
| [2.3.19.0](https://github.com/chr233/ASFEnhance/releases/tag/2.3.19.0) | 6.3.2.3 | ASF -> 6.3.2.3 |
126+
| [2.3.18.1](https://github.com/chr233/ASFEnhance/releases/tag/2.3.18.1) | 6.3.1.6 | ASF -> 6.3.1.6 |
124127
| [2.3.17.0](https://github.com/chr233/ASFEnhance/releases/tag/2.3.17.0) | 6.3.0.2 | 适配 Steam Award 2025 |
125128
| [2.3.16.0](https://github.com/chr233/ASFEnhance/releases/tag/2.3.16.0) | 6.3.0.2 | 修复 REPLAY 命令 |
126129
| [2.3.15.2](https://github.com/chr233/ASFEnhance/releases/tag/2.3.15.2) | 6.3.0.2 | 适配 SteamAwards 2025 .Net10 |
@@ -492,6 +495,17 @@ All avatars are from [Game Avatars Page](https://steamcommunity.com/actions/Game
492495
`SteamId`, `Friend Code`
493496
- `ADDBOTFRIEND ASF + ASF`: Allowed, but completely meaningless
494497

498+
### 社区市场相关
499+
500+
| 命令 | 缩写 | 权限 | 说明 |
501+
| ----------------------------------- | ---- | ---------- | --------------------------------------------------------------------------------------- |
502+
| `MARKETORDERS <Bots>` | | `Operator` | 获取当前求购订单信息 |
503+
| `MARKETORDER <Bots>` | | `Operator` |`MARKETORDERS` |
504+
| `MARKETINFO <Bots> Urls` | | `Operator` | 查询市场物品信息 |
505+
| `MARKETBUY <Bots> Url Price` | | `Master` | 发布求购订单, Url 是市场物品链接, Price 是求购价格 |
506+
| `MARKETBUY <Bots> Url Price Amount` | | `Master` | 发布求购订单, Url 是市场物品链接, Price 是求购价格, Amount 是求购数量, 可能需要两步验证 |
507+
| `MARKETCANCEL <Bots> OrderIds` | | `Master` | 取消求购订单 |
508+
495509
### Discovery Queue Commands
496510

497511
| Command | Shorthand | Access | Description |

README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ ASFEnhance 介绍 & 使用指南: [https://keylol.com/t804841-1-1](https://keylo
120120

121121
| ASFEnhance 版本 | 适配 ASF 版本 | 更新说明 |
122122
| ---------------------------------------------------------------------- | :-----------: | ------------------------------------------------------------ |
123+
| [2.3.20.0](https://github.com/chr233/ASFEnhance/releases/tag/2.3.20.0) | 6.3.3.3 | ASF -> 6.3.3.3, 新增 `MARKET` 相关命令 |
124+
| [2.3.19.0](https://github.com/chr233/ASFEnhance/releases/tag/2.3.19.0) | 6.3.2.3 | ASF -> 6.3.2.3 |
125+
| [2.3.18.1](https://github.com/chr233/ASFEnhance/releases/tag/2.3.18.1) | 6.3.1.6 | ASF -> 6.3.1.6 |
123126
| [2.3.17.0](https://github.com/chr233/ASFEnhance/releases/tag/2.3.17.0) | 6.3.0.2 | 适配 Steam Award 2025 |
124127
| [2.3.16.0](https://github.com/chr233/ASFEnhance/releases/tag/2.3.16.0) | 6.3.0.2 | 修复 REPLAY 命令 |
125128
| [2.3.15.2](https://github.com/chr233/ASFEnhance/releases/tag/2.3.15.2) | 6.3.0.2 | 适配 SteamAwards 2025 .Net10 |
@@ -478,6 +481,17 @@ ASFEnhance 介绍 & 使用指南: [https://keylol.com/t804841-1-1](https://keylo
478481
- `ADDBOTFRIEND a b c + ASF`: 允许使用通配符
479482
- `ADDBOTFRIEND ASF + ASF`: 允许使用, 但是没有意义
480483

484+
### 社区市场相关
485+
486+
| 命令 | 缩写 | 权限 | 说明 |
487+
| ----------------------------------- | ---- | ---------- | --------------------------------------------------------------------------------------- |
488+
| `MARKETORDERS <Bots>` | | `Operator` | 获取当前求购订单信息 |
489+
| `MARKETORDER <Bots>` | | `Operator` |`MARKETORDERS` |
490+
| `MARKETINFO <Bots> Urls` | | `Operator` | 查询市场物品信息 |
491+
| `MARKETBUY <Bots> Url Price` | | `Master` | 发布求购订单, Url 是市场物品链接, Price 是求购价格 |
492+
| `MARKETBUY <Bots> Url Price Amount` | | `Master` | 发布求购订单, Url 是市场物品链接, Price 是求购价格, Amount 是求购数量, 可能需要两步验证 |
493+
| `MARKETCANCEL <Bots> OrderIds` | | `Master` | 取消求购订单 |
494+
481495
### 探索队列
482496

483497
| 命令 | 缩写 | 权限 | 说明 |

README.ru.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ Command: `UPDATEPLUGINS stable ASFEnhance`
120120

121121
| Версия ASFEnhance | Совместимая версия ASF | Описание |
122122
| ---------------------------------------------------------------------- | :--------------------: | ------------------------------------------------------------ | --- | ---------------------------------------------------------------------- | ------- | ---------------------------- |
123+
| [2.3.20.0](https://github.com/chr233/ASFEnhance/releases/tag/2.3.20.0) | 6.3.3.3 | ASF -> 6.3.3.3, 新增 `MARKET` 相关命令 |
124+
| [2.3.19.0](https://github.com/chr233/ASFEnhance/releases/tag/2.3.19.0) | 6.3.2.3 | ASF -> 6.3.2.3 |
125+
| [2.3.18.1](https://github.com/chr233/ASFEnhance/releases/tag/2.3.18.1) | 6.3.1.6 | ASF -> 6.3.1.6 |
123126
| [2.3.17.0](https://github.com/chr233/ASFEnhance/releases/tag/2.3.17.0) | 6.3.0.2 | 适配 Steam Award 2025 |
124127
| [2.3.16.0](https://github.com/chr233/ASFEnhance/releases/tag/2.3.16.0) | 6.3.0.2 | 修复 REPLAY 命令 | | [2.3.15.2](https://github.com/chr233/ASFEnhance/releases/tag/2.3.15.2) | 6.3.0.2 | 适配 SteamAwards 2025 .Net10 |
125128
| [2.3.15.0](https://github.com/chr233/ASFEnhance/releases/tag/2.3.15.0) | 6.2.3.1 | 适配 SteamAwards 2025 |
@@ -486,6 +489,17 @@ Command: `UPDATEPLUGINS stable ASFEnhance`
486489
- `ADDBOTFRIEND a b c + ASF`: Разрешено использование значения `ASF` вместо ников ботов
487490
- `ADDBOTFRIEND ASF + ASF`: Разрешено, но бессмысленно
488491

492+
### 社区市场相关
493+
494+
| 命令 | 缩写 | 权限 | 说明 |
495+
| ----------------------------------- | ---- | ---------- | --------------------------------------------------------------------------------------- |
496+
| `MARKETORDERS <Bots>` | | `Operator` | 获取当前求购订单信息 |
497+
| `MARKETORDER <Bots>` | | `Operator` |`MARKETORDERS` |
498+
| `MARKETINFO <Bots> Urls` | | `Operator` | 查询市场物品信息 |
499+
| `MARKETBUY <Bots> Url Price` | | `Master` | 发布求购订单, Url 是市场物品链接, Price 是求购价格 |
500+
| `MARKETBUY <Bots> Url Price Amount` | | `Master` | 发布求购订单, Url 是市场物品链接, Price 是求购价格, Amount 是求购数量, 可能需要两步验证 |
501+
| `MARKETCANCEL <Bots> OrderIds` | | `Master` | 取消求购订单 |
502+
489503
### Команды Списка Рекомендаций
490504

491505
| Команда | Сокращение | Доступ | Описание |

0 commit comments

Comments
 (0)