Ported over Cloudflare stuff from the old Rainbet client due to 403s

This commit is contained in:
barelyprofessional
2025-05-16 14:15:38 -05:00
parent 9d614aefc8
commit 5367f0230c
2 changed files with 33 additions and 1 deletions

View File

@@ -128,6 +128,7 @@ public class BotServices
var settings = await SettingsProvider.GetMultipleValuesAsync([BuiltIn.Keys.Proxy, BuiltIn.Keys.RainbetEnabled]);
_rainbet = new RainbetWs(settings[BuiltIn.Keys.Proxy].Value, _cancellationToken);
_rainbet.OnRainbetBet += OnRainbetBet;
await _rainbet.RefreshCookies();
await _rainbet.StartWsClient();
_logger.Info("Built Rainbet Websocket");
}

View File

@@ -1,7 +1,9 @@
using System.Net;
using System.Net.WebSockets;
using System.Text.Json;
using FlareSolverrSharp;
using KfChatDotNetBot.Models;
using KfChatDotNetBot.Settings;
using NLog;
using Websocket.Client;
@@ -19,6 +21,8 @@ public class RainbetWs : IDisposable
public event OnRainbetBetEventHandler OnRainbetBet;
public event OnWsDisconnectionEventHandler OnWsDisconnection;
private CancellationToken _cancellationToken = CancellationToken.None;
private IEnumerable<string>? _cookies = null;
private string? _userAgent = null;
public RainbetWs(string? proxy = null, CancellationToken? cancellationToken = null)
{
@@ -39,7 +43,8 @@ public class RainbetWs : IDisposable
{
var clientWs = new ClientWebSocket();
clientWs.Options.SetRequestHeader("Origin", "https://rainbet.com");
clientWs.Options.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0");
clientWs.Options.SetRequestHeader("User-Agent", _userAgent);
clientWs.Options.SetRequestHeader("Cookie", string.Join("; ", _cookies!));
if (_proxy == null) return clientWs;
_logger.Debug($"Using proxy address {_proxy}");
clientWs.Options.Proxy = new WebProxy(_proxy);
@@ -138,6 +143,32 @@ public class RainbetWs : IDisposable
_logger.Error("--- End of Payload ---");
}
}
public async Task RefreshCookies()
{
_logger.Info("Refreshing cookies for Rainbet");
var settings =
await SettingsProvider.GetMultipleValuesAsync([BuiltIn.Keys.FlareSolverrApiUrl, BuiltIn.Keys.FlareSolverrProxy]);
var flareSolverrUrl = settings[BuiltIn.Keys.FlareSolverrApiUrl];
var flareSolverrProxy = settings[BuiltIn.Keys.FlareSolverrProxy];
var handler = new ClearanceHandler(flareSolverrUrl.Value)
{
// Generally takes <5 seconds
MaxTimeout = 30000,
};
_logger.Debug($"Configured clearance handler to use FlareSolverr endpoint: {flareSolverrUrl.Value}");
// I would suggest not using a proxy. It's pretty much a miracle this works at all.
if (flareSolverrProxy.Value != null)
{
handler.ProxyUrl = flareSolverrProxy.Value;
_logger.Debug($"Configured clearance handler to use {flareSolverrProxy.Value} for proxying the request");
}
var client = new HttpClient(handler);
// You get CF checkbox'd if you go directly to sportsbook.rainbet.com but works ok for root
var getResponse = await client.GetAsync("https://rainbet.com/", _cancellationToken);
_cookies = getResponse.Headers.GetValues("Set-Cookie");
_userAgent = getResponse.RequestMessage!.Headers.UserAgent.ToString();
}
public void Dispose()
{