-
Автор темы
- #1
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
C#:
using System.Net.Http.Json;
using System.Text.Json;
public class DonationChecker
{
private record DonationResponse(string Status, int Charger);
private class DonationResults
{
public Dictionary<string, List<string>> Donates { get; init; } = new();
}
private readonly string[] _premiumRanks = ["gercog", "knyaz", "prince", "titan", "elita"];
private readonly string[] _standardRanks = ["glava", "skvid", "aspid", "hero", "strag", "baron"];
private readonly Dictionary<int, string> _rankPrices = new()
{
{ 2799, "knyaz" }, { 1799, "prince" }, { 1299, "titan" },
{ 879, "elita" }, { 549, "glava" }, { 349, "skvid" },
{ 249, "aspid" }, { 129, "hero" }, { 49, "strag" },
{ 39, "baron" }
};
private readonly HttpClient _client = new();
private readonly string _baseUrl = "https://funtime.su/ajax/buy_product";
public async Task CheckDonationsAsync()
{
var nicknames = await File.ReadAllLinesAsync("all_user_ft.txt");
var blacklist = (await File.ReadAllLinesAsync("blacklist.txt")).ToHashSet();
var premiumResults = await LoadOrCreateResults("donates.json", _premiumRanks);
var standardResults = await LoadOrCreateResults("donates_low.json", _standardRanks);
foreach (var nickname in nicknames.Where(n => !blacklist.Contains(n)))
{
try
{
var response = await CheckDonationStatus(nickname);
await ProcessResponse(response, nickname, premiumResults, standardResults);
await File.AppendAllTextAsync("blacklist.txt", $"{nickname}\n");
Console.WriteLine($"Processed {nickname}: {response.Charger}");
}
catch (Exception ex)
{
Console.WriteLine($"Error processing {nickname}: {ex.Message}");
}
}
await SaveResults(premiumResults, "donates.json");
await SaveResults(standardResults, "donates_low.json");
Console.WriteLine("All nicknames have been processed successfully.");
}
private async Task<DonationResponse> CheckDonationStatus(string nickname)
{
var data = new FormUrlEncodedContent(new Dictionary<string, string>
{
{ "id", "61" },
{ "server", "1" },
{ "method", "forever" },
{ "checking", "0" },
{ "promotion", "0" },
{ "nick", nickname },
{ "promo", "aqua" }
});
var response = await _client.PostAsync(_baseUrl, data);
return await response.Content.ReadFromJsonAsync<DonationResponse>()
?? throw new Exception("Invalid response");
}
private async Task<DonationResults> LoadOrCreateResults(string filename, string[] ranks)
{
if (!File.Exists(filename))
return new DonationResults { Donates = ranks.ToDictionary(r => r, _ => new List<string>()) };
try
{
return await JsonSerializer.DeserializeAsync<DonationResults>(
File.OpenRead(filename)) ?? throw new Exception("Invalid JSON");
}
catch
{
Console.WriteLine($"Error: Invalid JSON in {filename}. Creating new file.");
return new DonationResults { Donates = ranks.ToDictionary(r => r, _ => new List<string>()) };
}
}
private async Task ProcessResponse(DonationResponse response, string nickname,
DonationResults premium, DonationResults standard)
{
if (response.Status == "error")
{
premium.Donates["gercog"].Add(nickname);
return;
}
if (_rankPrices.TryGetValue(response.Charger, out var rank))
{
var results = _premiumRanks.Contains(rank) ? premium : standard;
results.Donates[rank].Add(nickname);
}
}
private async Task SaveResults(DonationResults results, string filename)
{
await using var fs = File.Create(filename);
await JsonSerializer.SerializeAsync(fs, results, new JsonSerializerOptions
{
WriteIndented = true
});
}
}