Глючный плагин для ASF
Вы меня простите, но нафига? Там же одного IBotCommand за глаза, всё равно же заглушек на остальное налеплено?internal sealed class SpringClean : IASF, IBot, IBotCommand, IBotSteamClient
Глючный плагин для ASF
Вы меня простите, но нафига? Там же одного IBotCommand за глаза, всё равно же заглушек на остальное налеплено?internal sealed class SpringClean : IASF, IBot, IBotCommand, IBotSteamClient
Копипаста и лень. А IBotSteamClient чтобы напрямую лицензии добавлять через стимкит, мне так удобнее. Плагин одноразовый, качество кода здесь не особо важно...Вы меня простите, но нафига? Там же одного IBotCommand за глаза, всё равно же заглушек на остальное налеплено?
Да я не про качество кода, я как раз про лень... много лишних телодвижений.
много? тогда делай ручками и без asfДа я не про качество кода, я как раз про лень... много лишних телодвижений.
Зачем? Я ещё в первый день плагин написал и на всех акках сделал. Просто я его не раздаю бесплатно.много? тогда делай ручками и без asf
я это сделал за тебя)Вот, спасибо, заработало. Репутацию добавить не могу, так как нужно ещё 200 пользователей))
И как продажи? Нашел лошариков на покупку??Зачем? Я ещё в первый день плагин написал и на всех акках сделал. Просто я его не раздаю бесплатно.
Ты знаешь, как это ни удивительно, но да. Я и здесь-то зарегился для этого, но вам уже посчастливилось. А если б раньше пришёл - то как знать чем бы всё обернулось)И как продажи? Нашел лошариков на покупку??
Да я не про качество кода, я как раз про лень... много лишних телодвижений.
using System;
using System.Collections.Generic;
using System.Composition;
using System.Linq;
using System.Threading.Tasks;
using AngleSharp.Dom;
using ArchiSteamFarm;
using ArchiSteamFarm.Plugins;
namespace m4d0ne.SpringClean2020
{
[Export(typeof(IPlugin))]
internal sealed class SpringClean : IBotCommand
{
public string Name => nameof(SpringClean);
public Version Version => typeof(SpringClean).Assembly.GetName().Version;
private async Task<bool> JoinEvent(Bot bot)
{
return await bot.ArchiWebHandler.UrlPostWithSession("https://store.steampowered.com", "/springcleaning/ajaxoptintoevent");
}
private async Task<List<uint>> GetGamesToPlay(Bot bot)
{
List<uint> tasks = new List<uint>();
IDocument eventPage = await bot.ArchiWebHandler.UrlGetToHtmlDocumentWithSession("https://store.steampowered.com", "/springcleaning");
if (eventPage != null)
{
var taskNodes = eventPage.GetElementsByClassName("task_app_completed");
foreach(var node in taskNodes)
{
string appID = node.GetAttributeValue("data-sg-appid");
if(!string.IsNullOrEmpty(appID))
{
tasks.Add(uint.Parse(appID));
}
}
}
return tasks;
}
private async Task RequestMissingLicense(Bot bot, List<uint> apps) {
List<uint> notOwned = new List<uint>();
var ownedGames = await bot.ArchiWebHandler.GetMyOwnedGames();
if (ownedGames != null) {
notOwned = ownedGames.Where(x => !apps.Contains(x.Key)).ToDictionary(x => x.Key).Keys.ToList();
} else {
notOwned = apps;
}
if (notOwned.Count() > 0) {
await bot.Commands.Response(ASF.GlobalConfig.SteamOwnerID, string.Format("ADDLICENSE {0} {1}", bot.BotName, string.Join(",", notOwned.Select(x => string.Format("app/{0}",x)))));
}
}
private async Task<string> DoSpringClean(Bot bot)
{
bool joined = await JoinEvent(bot);
if(joined)
{
List<uint> appsToPlay = await GetGamesToPlay(bot);
if(appsToPlay.Count > 0)
{
await RequestMissingLicense(bot, appsToPlay);
await bot.Actions.Play(appsToPlay);
return bot.BotName + ": Ok";
}
else
{
return bot.BotName + ": No games to play!";
}
}
return bot.BotName + ": Could not join event!";
}
public async Task<string> OnBotCommand(Bot bot, ulong steamID, string message, string[] args)
{
switch(args[0].ToUpperInvariant())
{
case "SPRINGCLEAN" when bot.HasPermission(steamID, BotConfig.EPermission.Operator):
if(args.Count() > 1)
{
List<Bot> activeBots = Bot.GetBots(args[1]).Where(x => x.IsConnectedAndLoggedOn).ToList();
int delayCnt = activeBots.Count();
IList<string> result = await Utilities.InParallel(activeBots.Select( async x => { await Task.Delay(TimeSpan.FromSeconds(delayCnt * 30)); --delayCnt; return await DoSpringClean(x); }));
return result.Count() > 0 ? string.Join(Environment.NewLine, result) : null;
}
else
{
return await DoSpringClean(bot);
}
default:
return null;
}
}
public void OnLoaded()
{
ASF.ArchiLogger.LogGenericInfo("SpringCleanPlugin loaded. Expect weird behaviour and unexpected consequences.");
}
}
}
ты научил скрипт делать на все аки? типо springclean asf можно прописать?Передавать по цепочке команды не так удобно, как работать со стимом напрямую... но, держи, почистил код и убрал "лишнее".Код:using System; using System.Collections.Generic; using System.Composition; using System.Linq; using System.Threading.Tasks; using AngleSharp.Dom; using ArchiSteamFarm; using ArchiSteamFarm.Plugins; namespace m4d0ne.SpringClean2020 { [Export(typeof(IPlugin))] internal sealed class SpringClean : IBotCommand { public string Name => nameof(SpringClean); public Version Version => typeof(SpringClean).Assembly.GetName().Version; private async Task<bool> JoinEvent(Bot bot) { return await bot.ArchiWebHandler.UrlPostWithSession("https://store.steampowered.com", "/springcleaning/ajaxoptintoevent"); } private async Task<List<uint>> GetGamesToPlay(Bot bot) { List<uint> tasks = new List<uint>(); IDocument eventPage = await bot.ArchiWebHandler.UrlGetToHtmlDocumentWithSession("https://store.steampowered.com", "/springcleaning"); if (eventPage != null) { var taskNodes = eventPage.GetElementsByClassName("task_app_completed"); foreach(var node in taskNodes) { string appID = node.GetAttributeValue("data-sg-appid"); if(!string.IsNullOrEmpty(appID)) { tasks.Add(uint.Parse(appID)); } } } return tasks; } private async Task RequestMissingLicense(Bot bot, List<uint> apps) { List<uint> notOwned = new List<uint>(); var ownedGames = await bot.ArchiWebHandler.GetMyOwnedGames(); if (ownedGames != null) { notOwned = ownedGames.Where(x => !apps.Contains(x.Key)).ToDictionary(x => x.Key).Keys.ToList(); } else { notOwned = apps; } if (notOwned.Count() > 0) { await bot.Commands.Response(ASF.GlobalConfig.SteamOwnerID, string.Format("ADDLICENSE {0} {1}", bot.BotName, string.Join(",", notOwned.Select(x => string.Format("app/{0}",x))))); } } private async Task<string> DoSpringClean(Bot bot) { bool joined = await JoinEvent(bot); if(joined) { List<uint> appsToPlay = await GetGamesToPlay(bot); if(appsToPlay.Count > 0) { await RequestMissingLicense(bot, appsToPlay); await bot.Actions.Play(appsToPlay); return bot.BotName + ": Ok"; } else { return bot.BotName + ": No games to play!"; } } return bot.BotName + ": Could not join event!"; } public async Task<string> OnBotCommand(Bot bot, ulong steamID, string message, string[] args) { switch(args[0].ToUpperInvariant()) { case "SPRINGCLEAN" when bot.HasPermission(steamID, BotConfig.EPermission.Operator): if(args.Count() > 1) { List<Bot> activeBots = Bot.GetBots(args[1]).Where(x => x.IsConnectedAndLoggedOn).ToList(); int delayCnt = activeBots.Count(); IList<string> result = await Utilities.InParallel(activeBots.Select( async x => { await Task.Delay(TimeSpan.FromSeconds(delayCnt * 30)); --delayCnt; return await DoSpringClean(x); })); return result.Count() > 0 ? string.Join(Environment.NewLine, result) : null; } else { return await DoSpringClean(bot); } default: return null; } } public void OnLoaded() { ASF.ArchiLogger.LogGenericInfo("SpringCleanPlugin loaded. Expect weird behaviour and unexpected consequences."); } } }
EDIT: билд забыл ... https://mega.nz/file/OH4BXCzS#fF3x_NfTBrqI7VOS6MErg1Vhz4svSSMeK4__AQJ2YW0
Он с самого начала умел так.ты научил скрипт делать на все аки? типо springclean asf можно прописать?
у меня чето зависло проверяю аки нет ачивки, в ручную каждый ник вписовал. потратил 15 минут, когда прописовал asf стояло минут 20 ни на одном аке не было ачивки(Он с самого начала умел так.
Оо, кто пожаловал в наши земли!Ты знаешь, как это ни удивительно, но да. Я и здесь-то зарегился для этого, но вам уже посчастливилось. А если б раньше пришёл - то как знать чем бы всё обернулось)
жди. У меня только через 4 часа выполнилосьу меня чето зависло проверяю аки нет ачивки, в ручную каждый ник вписовал. потратил 15 минут, когда прописовал asf стояло минут 20 ни на одном аке не было ачивки(
---------Двойное сообщение соединено: ---------точнее не зависло а просто идет выполнение и все 0реакции
30 секунд на 1 аккаунт... Можно уменьшить задержку, но страшно.у меня чето зависло проверяю аки нет ачивки, в ручную каждый ник вписовал. потратил 15 минут, когда прописовал asf стояло минут 20 ни на одном аке не было ачивки(
---------Двойное сообщение соединено: ---------точнее не зависло а просто идет выполнение и все 0реакции
сколько аков?Оо, кто пожаловал в наши земли!
Модератор группы asf.
---------Двойное сообщение соединено: ---------
жди. У меня только через 4 часа выполнилось
а кто подтвердит, что это он?Оо, кто пожаловал в наши земли!
Модератор группы asf.
В пачке - 250сколько аков?
ну... тот же никнейм и ава.а кто подтвердит, что это он?
Можно сразу запрашивать лицензию на appid https://steam.readthedocs.io/en/lat...lient.builtins.apps.Apps.request_free_licenseP.s. Много времени уходит на 1 акк т.к. приходится парсить с левого сайта для каждой игры subid, если кто то знает как его найти в самом стиме напишите мне в лс, буду благодарен