MazeRunner/Bobo.System.Maze.Console/Program.cs
2023-07-11 22:38:11 +02:00

96 lines
2.5 KiB
C#

// See https://aka.ms/new-console-template for more information
using Bobo.System.Maze.Bot;
using Bobo.System.Maze.Bot.Interface;
using HightechICT.Amazeing.Client.Rest;
using Microsoft.Extensions.Logging;
using Serilog;
using Serilog.Core;
using System.Net;
string apiAuthorization = "HTI Thanks You [OZL]";
string baseUrl = @"https://maze.hightechict.nl/";
string username = "Hi Hightech!";
string mazeName = "Example Maze";
Logger serilogger = new LoggerConfiguration()
.WriteTo.Console().CreateLogger();
var loggerFactory = new LoggerFactory()
.AddSerilog(serilogger);
Microsoft.Extensions.Logging.ILogger logger = loggerFactory.CreateLogger("Logger");
logger.Log(LogLevel.Information, "Starting bot...");
HttpClient httpClient = new ();
httpClient.DefaultRequestHeaders.Add("Authorization", apiAuthorization);
AmazeingClient mazeClient = new AmazeingClient(baseUrl, httpClient);
ICollection<MazeInfo> mazes = await mazeClient.AllMazes();
bool registered = await RegisterPlayer(username, true);
if (!registered)
{
logger.Log(LogLevel.Information, $"Player '{username}' failed to register", username);
return;
}
logger.Log(LogLevel.Information, $"Player '{username}' registered", username);
logger.Log(LogLevel.Information, $"Starting SimplerBot");
BaseBot bot = new SimpleBot(mazeClient, logger);
foreach (MazeInfo maze in mazes)
{
int collected = await bot.Run(maze);
logger.Log(LogLevel.Information, $"Collected {collected}/{maze.PotentialReward}", collected, maze.PotentialReward);
}
async Task<bool> RegisterPlayer(string username, bool reset = false)
{
PlayerInfo? info = null;
try
{
info = await mazeClient.GetPlayerInfo();
}
catch (ApiException apiEx) when (apiEx.StatusCode == (int)HttpStatusCode.NotFound)
{
// no player registered.
// do some logging
}
if (info != null && reset == false)
{
// player already registered and no re-register needed.
return true;
}
if (info != null && reset == true)
{
// player already registered and re-register needed.
try
{
// forget the player.
await mazeClient.ForgetPlayer();
}
catch (ApiException apiEx)
{
// do some logging
return false;
}
}
try
{
// register the player.
await mazeClient.RegisterPlayer(username);
return true;
}
catch (ApiException apiEx)
{
// do some logging
return false;
}
}