Skip to content

Commit 9ad95e1

Browse files
authored
Merge pull request #107 from Erol444/fix-25-04-2022
Fix 25 04 2022
2 parents e0d5590 + 29da4a8 commit 9ad95e1

21 files changed

+1452
-578
lines changed

.github/workflows/pre-release.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ name: PreReleaseFlow
22

33
on:
44
pull_request:
5-
branches: develop
6-
types: closed
5+
branches: [develop]
6+
types: [closed]
77
workflow_dispatch:
88

99
jobs:

.github/workflows/release.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ name: ReleaseFlow
22

33
on:
44
pull_request:
5-
branches: master
6-
types: closed
5+
branches: [master]
6+
types: [closed]
77
workflow_dispatch:
88

99
jobs:
@@ -18,7 +18,7 @@ jobs:
1818
with:
1919
one_of: release
2020
repo_token: ${{ secrets.GITHUB_TOKEN }}
21-
21+
2222
- name: 'Checkout repo'
2323
uses: actions/checkout@v2
2424

TbsCore/Core/TaskTimer.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,9 @@ private async void NewTick()
110110
await VillageHelper.SwitchVillage(_acc, task.Vill.Id);
111111
}
112112
}
113+
113114
await TaskExecutor.Execute(_acc, task);
115+
114116
IsTaskExcuting = false;
115117
}
116118

TbsCore/Core/WebBrowserInfo.cs

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ private void SetupChromeDriver(Access.Access access, string username, string ser
8383

8484
// So websites (Travian) can't detect the bot
8585
options.AddExcludedArgument("enable-automation");
86-
options.AddAdditionalCapability("useAutomationExtension", false);
86+
options.AddAdditionalOption("useAutomationExtension", false);
8787
options.AddArgument("--disable-blink-features=AutomationControlled");
8888
options.AddArgument("--disable-features=UserAgentClientHint");
8989
options.AddArguments("--disable-logging");
@@ -187,21 +187,6 @@ public string GetBearerToken()
187187
return (string)js.ExecuteScript("for(let field in Travian) { if (Travian[field].length == 32) return Travian[field]; }");
188188
}
189189

190-
public IWebElement FindElementById(string element)
191-
{
192-
return Driver.FindElementById(element);
193-
}
194-
195-
public IWebElement FindElementByXPath(string xPath)
196-
{
197-
return Driver.FindElementByXPath(xPath);
198-
}
199-
200-
public ITargetLocator SwitchTo()
201-
{
202-
return Driver.SwitchTo();
203-
}
204-
205190
/// <summary>
206191
/// catch (WebDriverException e) when (e.Message.Contains("chrome not reachable") || e.Message.Contains("no such window:"))
207192
/// </summary>

TbsCore/Helpers/VillageHelper.cs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,12 +112,19 @@ public static async Task<bool> SwitchVillage(Account acc, int id)
112112
acc.Logger.Information("Cannot find village in village list");
113113
return false;
114114
}
115+
try
116+
{
117+
var element = acc.Wb.Driver.FindElement(By.XPath(node.XPath));
118+
element.Click();
119+
}
120+
catch
121+
{
122+
acc.Logger.Warning("Bot cannot switch village, may break some things later.");
123+
return false;
124+
}
115125

116-
var element = acc.Wb.Driver.FindElement(By.XPath(node.XPath));
117-
element.Click();
118126
//dorf1.php?newdid=25270&
119-
await DriverHelper.WaitPageChange(acc, $"{id}", 0.2);
120-
return true;
127+
return await DriverHelper.WaitPageChange(acc, $"{id}");
121128
}
122129

123130
/// <summary>

TbsCore/Tasks/LowLevel/ChangeVillageName.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Collections.Generic;
1+
using OpenQA.Selenium;
2+
using System.Collections.Generic;
23
using System.Threading.Tasks;
34
using TbsCore.Helpers;
45
using TbsCore.Models.AccModels;
@@ -59,11 +60,11 @@ public override async Task<TaskRes> Execute(Account acc)
5960
// Empty text box
6061
await DriverHelper.WriteByName(acc, $"dname[{change.Item1}]=", "");
6162
//insert new name into the textbox
62-
acc.Wb.FindElementByXPath($"//input[@name='dname[{change.Item1}]=']").SendKeys(change.Item2);
63+
acc.Wb.Driver.FindElement(By.XPath($"//input[@name='dname[{change.Item1}]=']")).SendKeys(change.Item2);
6364
}
6465

6566
await Task.Delay(AccountHelper.Delay(acc));
66-
acc.Wb.FindElementById("btn_ok").Click(); //click save button
67+
acc.Wb.Driver.FindElement(By.Id("btn_ok")).Click(); //click save button
6768

6869
return TaskRes.Executed;
6970
}

TbsCore/Tasks/LowLevel/GetServerInfo.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,20 @@ public class GetServerInfo : BotTask
88
{
99
public override async Task<TaskRes> Execute(Account acc)
1010
{
11-
await NavigationHelper.ToDorf2(acc);
12-
11+
await Task.Yield();
1312
// Get Map size
1413
var size = DriverHelper.GetJsObj<long>(acc, "window.TravianDefaults.Map.Size.top");
1514
acc.AccInfo.MapSize = (int)size;
15+
acc.Logger.Information($"Server map size is {acc.AccInfo.MapSize}x{acc.AccInfo.MapSize}");
1616

1717
// Get server speed
1818
var speed = DriverHelper.GetJsObj<long>(acc, "Travian.Game.speed");
1919
acc.AccInfo.ServerSpeed = (int)speed;
20+
acc.Logger.Information($"Server speed is {acc.AccInfo.ServerSpeed}");
2021

2122
// Get server version
2223
acc.AccInfo.ServerVersion = (acc.Wb.Html.GetElementbyId("sidebarBoxDailyquests") == null ? Classificator.ServerVersionEnum.T4_5 : Classificator.ServerVersionEnum.TTwars);
24+
acc.Logger.Information($"Server version is {acc.AccInfo.ServerVersion}");
2325

2426
return TaskRes.Executed;
2527
}

TbsCore/Tasks/LowLevel/GetTribe.cs

Lines changed: 63 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4,60 +4,86 @@
44
using TbsCore.Models.AccModels;
55
using TbsCore.Helpers;
66
using TbsCore.Parsers;
7+
using System;
78

89
namespace TbsCore.Tasks.LowLevel
910
{
10-
public class GetTribe : RandomTask
11+
public class GetTribe : BotTask
1112
{
1213
public override async Task<TaskRes> Execute(Account acc)
1314
{
14-
// Tribe => id="questmasterButton", class name vid_{tribeId}
15-
// If no questmasterButton, check tribe after updating villages => rally point/barracks
16-
17-
base.MinWait = 500;
18-
base.MaxWait = 3000;
19-
await base.Execute(acc);
20-
21-
var questMaster = acc.Wb.Html.GetElementbyId("questmasterButton");
22-
if (questMaster != null)
15+
await Task.Yield();
16+
switch (acc.AccInfo.ServerVersion)
2317
{
24-
var vid = questMaster.GetClasses().FirstOrDefault(x => x.StartsWith("vid"));
25-
var tribeId = Parser.RemoveNonNumeric(vid);
18+
case Classificator.ServerVersionEnum.TTwars:
19+
{
20+
var result = CheckTTWars(acc);
21+
if (StopFlag) return TaskRes.Executed;
22+
if (!result) return TaskRes.Executed;
23+
}
24+
break;
2625

27-
SetTribe(acc, (Classificator.TribeEnum)tribeId);
26+
case Classificator.ServerVersionEnum.T4_5:
27+
{
28+
var result = CheckT45(acc);
29+
if (StopFlag) return TaskRes.Executed;
30+
if (!result) return TaskRes.Executed;
31+
}
32+
break;
2833

29-
return TaskRes.Executed;
34+
default:
35+
break;
3036
}
37+
var tribeStr = acc.AccInfo.Tribe == null ? "Unknown" : $"{acc.AccInfo.Tribe}";
38+
acc.Logger.Information($"Tribe account is {tribeStr}");
39+
return TaskRes.Executed;
40+
}
3141

32-
await NavigationHelper.ToRallyPoint(acc, Vill, NavigationHelper.RallyPointTab.Managenment);
42+
private static bool CheckTTWars(Account acc)
43+
{
44+
var nodeDiv = acc.Wb.Html.DocumentNode.Descendants("div").FirstOrDefault(x => x.HasClass("playerName"));
45+
if (nodeDiv == null)
46+
{
47+
acc.Logger.Warning("Cannot find hero name");
48+
return false;
49+
}
50+
var nodeImage = nodeDiv.Descendants("img").FirstOrDefault();
51+
if (nodeImage == null)
52+
{
53+
acc.Logger.Warning("Cannot find image hero tribe");
54+
return false;
55+
}
56+
var tribeStr = nodeImage.GetAttributeValue("alt", "");
57+
var result = Enum.TryParse(tribeStr, out Classificator.TribeEnum tribe);
58+
if (!result)
59+
{
60+
acc.Logger.Warning($"Cannot parse tribe name [{tribeStr}]");
61+
return false;
62+
}
3363

34-
List<int> idsChecked = new List<int>(acc.Villages.Count);
64+
acc.AccInfo.Tribe = tribe;
65+
return true;
66+
}
3567

36-
// If no rally point, navigate somewhere else
37-
while (acc.Wb.Html.GetElementbyId("contract") == null)
68+
private static bool CheckT45(Account acc)
69+
{
70+
var questMaster = acc.Wb.Html.GetElementbyId("questmasterButton");
71+
if (questMaster == null)
3872
{
39-
idsChecked.Add(acc.Villages.FirstOrDefault(x => x.Active).Id);
40-
41-
var nextId = NextVillCheck(acc, idsChecked);
42-
if (nextId == 0) throw new System.Exception("Can't get account tribe! Please build rally point!");
43-
await VillageHelper.SwitchVillage(acc, nextId);
73+
acc.Logger.Warning("Cannot find avatar tribe questmater");
74+
return false;
75+
}
76+
var vid = questMaster.GetClasses().FirstOrDefault(x => x.StartsWith("vid"));
77+
if (vid == null)
78+
{
79+
acc.Logger.Warning("Cannot detect tribe");
80+
return false;
4481
}
4582

46-
await NavigationHelper.ToRallyPoint(acc, Vill, NavigationHelper.RallyPointTab.SendTroops);
47-
48-
var unitImg = acc.Wb.Html.DocumentNode.Descendants("img").First(x => x.HasClass("unit"));
49-
var unitInt = Parser.RemoveNonNumeric(unitImg.GetClasses().First(x => x != "unit"));
50-
int tribeInt = (int)(unitInt / 10);
51-
// ++ since the first element in Classificator.TribeEnum is Any, second is Romans.
52-
tribeInt++;
53-
SetTribe(acc, (Classificator.TribeEnum)tribeInt);
83+
var tribeId = Parser.RemoveNonNumeric(vid);
84+
acc.AccInfo.Tribe = (Classificator.TribeEnum)tribeId;
5485

55-
return TaskRes.Executed;
86+
return true;
5687
}
57-
58-
private void SetTribe(Account acc, Classificator.TribeEnum tribe) => acc.AccInfo.Tribe = tribe;
59-
60-
private int NextVillCheck(Account acc, List<int> villsChecked) =>
61-
acc.Villages.FirstOrDefault(x => !villsChecked.Contains(x.Id))?.Id ?? 0;
6288
}
6389
}

TbsCore/Tasks/LowLevel/ReopenDriver.cs

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,29 +15,16 @@ public abstract class ReopenDriver : BotTask
1515

1616
public override async Task<TaskRes> Execute(Account acc)
1717
{
18+
StopFlag = false;
1819
acc.Wb.Close();
1920
string previousLog = "";
2021
do
2122
{
23+
if (StopFlag) break;
2224
await Task.Delay(1000);
2325
var minutes = GetMinutes(acc);
2426
if (minutes <= 0) break;
25-
string log;
26-
switch (acc.Status)
27-
{
28-
case Status.Paused:
29-
case Status.Pausing:
30-
log = $"Chrome will reopen in {minutes} mins but account is paused, chrome won't be open until bot is resumed";
31-
break;
32-
33-
case Status.Stopping:
34-
acc.Logger.Information("Account logout. Ignore reopen chrome");
35-
return TaskRes.Executed;
36-
37-
default:
38-
log = $"Chrome will reopen in {minutes} mins";
39-
break;
40-
}
27+
string log = $"Chrome will reopen in {minutes} mins";
4128

4229
if (log != previousLog)
4330
{

TbsCore/Tasks/LowLevel/SendFarmlist.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using HtmlAgilityPack;
2+
using OpenQA.Selenium;
23
using System;
34
using System.Collections.Generic;
45
using System.Linq;
@@ -87,7 +88,7 @@ public override async Task<TaskRes> Execute(Account acc)
8788

8889
case ServerVersionEnum.T4_5:
8990
var startRaid = flNode.Descendants("button").FirstOrDefault(x => x.HasClass("startButton"));
90-
acc.Wb.FindElementById(startRaid.Id).Click();
91+
acc.Wb.Driver.FindElement(By.Id(startRaid.Id)).Click();
9192
break;
9293
}
9394

0 commit comments

Comments
 (0)