Overseer and HttpsMessageBuilder

This commit is contained in:
2023-02-24 20:29:20 +06:00
parent 327d06b3d0
commit 7243a2b0d3
16 changed files with 488 additions and 66 deletions

43
DataModels/Config.cs Normal file
View File

@@ -0,0 +1,43 @@
namespace InstaFollowersOverseer;
public class Config : DtsodFile
{
#nullable disable
public string botToken;
public string instagramLogin;
public string instagramPassword;
public double checksIntervalMinutes;
#nullable enable
public Config(string fileNameWithoutExt) : base(fileNameWithoutExt) { }
public override void LoadFromFile()
{
var dtsod = ReadDtsodFromFile(true);
try
{
botToken = dtsod[nameof(botToken)];
instagramLogin = dtsod[nameof(instagramLogin)];
instagramPassword = dtsod[nameof(instagramPassword)];
checksIntervalMinutes = dtsod[nameof(checksIntervalMinutes)];
}
catch (Exception ex)
{
LoadedSuccessfully = false;
throw new Exception($"your {FileName} format is invalid\n"
+ $"See {FileExampleName}", innerException: ex);
}
}
public override DtsodV23 ToDtsod()
{
var d = new DtsodV23
{
{ nameof(botToken), botToken },
{ nameof(instagramLogin), instagramLogin },
{ nameof(instagramPassword), instagramPassword },
{ nameof(checksIntervalMinutes), checksIntervalMinutes }
};
return d;
}
}

71
DataModels/DtsodFile.cs Normal file
View File

@@ -0,0 +1,71 @@
using System.IO;
namespace InstaFollowersOverseer;
public abstract class DtsodFile
{
public bool LoadedSuccessfully = false;
public readonly string FileNameWithoutExt;
public readonly string FileName;
public readonly string FileExampleName;
public DtsodFile(string fileNameWithoutExt)
{
FileNameWithoutExt = fileNameWithoutExt;
FileName = fileNameWithoutExt + ".dtsod";
FileExampleName = fileNameWithoutExt + "-example.dtsod";
}
public void CreateBackup()
{
string backupPath=$"backups/{FileNameWithoutExt}.d/{FileNameWithoutExt}"
+DateTime.Now.ToString(MyTimeFormat.ForFileNames)+".dtsod";
Program.MainLogger.LogInfo($"creating backup if file {FileName} at path {backupPath}");
File.Copy(FileName,backupPath,false);
}
public DtsodV23 ReadDtsodFromFile(bool trhowIfFileNotFound)
{
Program.MainLogger.LogInfo($"reading file {FileName}");
EmbeddedResources.CopyToFile(
$"{EmbeddedResourcesPrefix}.{FileExampleName}",
FileExampleName);
if (!File.Exists(FileName))
{
File.WriteAllText(FileName, "#DtsodV23\n");
string message = $"file {FileName} doesnt exist, created new blank";
if (trhowIfFileNotFound)
throw new FileNotFoundException(message);
Program.MainLogger.LogWarn(message);
return new DtsodV23();
}
string fileText = File.ReadAllText(FileName);
Program.MainLogger.LogDebug(fileText);
// should be set to false on LoadFromFile() errors
LoadedSuccessfully = true;
return new DtsodV23(fileText);
}
public abstract void LoadFromFile();
public abstract DtsodV23 ToDtsod();
public void SaveToFile()
{
if(!LoadedSuccessfully)
return;
if(File.Exists(FileName))
CreateBackup();
Program.MainLogger.LogInfo($"saving file {FileName}");
string dtsodStr = ToDtsod().ToString();
Program.MainLogger.LogDebug(dtsodStr);
File.OpenWrite(FileName)
.FluentWriteString("#DtsodV23\n")
.FluentWriteString(dtsodStr)
.Close();
}
}

View File

@@ -0,0 +1,35 @@
namespace InstaFollowersOverseer;
public class InstagramObservableParams
{
public string instagramUsername;
public bool notifyOnFollowing=true;
public bool notifyOnUnfollowing=true;
public InstagramObservableParams(string instaUsername)
{
instagramUsername = instaUsername;
}
public InstagramObservableParams(DtsodV23 _overseeParams)
{
instagramUsername = _overseeParams["instagramUsername"];
if (_overseeParams.TryGetValue("notifyOnFollowing", out var _notifyOnFollowing))
notifyOnFollowing = _notifyOnFollowing;
if (_overseeParams.TryGetValue("notifyOnUnfollowing", out var _notifyOnUnfollowing))
notifyOnUnfollowing = _notifyOnUnfollowing;
}
public DtsodV23 ToDtsod()
{
var d = new DtsodV23();
d.Add(nameof(instagramUsername), instagramUsername);
if(!notifyOnFollowing)
d.Add(nameof(notifyOnFollowing), false);
if(!notifyOnUnfollowing)
d.Add(nameof(notifyOnFollowing), false);
return d;
}
public override string ToString() => ToDtsod().ToString();
}

84
DataModels/UsersData.cs Normal file
View File

@@ -0,0 +1,84 @@
namespace InstaFollowersOverseer;
public class UsersData : DtsodFile
{
public Dictionary<string, List<InstagramObservableParams>> UsersDict=new();
public UsersData(string fileName) : base(fileName) {}
public override void LoadFromFile()
{
var dtsod=ReadDtsodFromFile(false);
try
{
foreach (var uset in dtsod)
{
string telegramUserId = uset.Key;
List<InstagramObservableParams> oparams = new();
foreach (DtsodV23 _overseeParams in uset.Value)
oparams.Add(new InstagramObservableParams(_overseeParams));
UsersDict.Add(telegramUserId, oparams);
}
}
catch (Exception ex)
{
LoadedSuccessfully = false;
throw new Exception($"your {FileName} format is invalid\n"
+ $"See {FileExampleName}", innerException: ex);
}
}
public override DtsodV23 ToDtsod()
{
var b = new DtsodV23();
foreach (var userS in UsersDict)
b.Add(userS.Key,
userS.Value.Select<InstagramObservableParams, DtsodV23>(iop =>
iop.ToDtsod()
).ToList());
return b;
}
public List<InstagramObservableParams>? Get(long telegramUserId)
{
string userIdStr = telegramUserId.ToString();
if (!UsersDict.TryGetValue(userIdStr, out var overseeParams))
return null;
return overseeParams;
}
public void AddOrSet(long telegramUserId, InstagramObservableParams instagramObservableParams)
{
// Add
// doesnt contain settings for telegramUserId
string userIdStr = telegramUserId.ToString();
if (!UsersDict.TryGetValue(userIdStr, out var thisUsersData))
{
UsersDict.Add(userIdStr, new (){ instagramObservableParams });
return;
}
// Set
// settings for telegramUserId contain InstagramObservableParams with instagramObservableParams.instagramUsername
for (var i = 0; i < thisUsersData.Count; i++)
{
if (thisUsersData[i].instagramUsername == instagramObservableParams.instagramUsername)
{
thisUsersData[i] = instagramObservableParams;
return;
}
}
// Add
// doesnt contain InstagramObservableParams with instagramObservableParams.instagramUsername
thisUsersData.Add(instagramObservableParams);
}
public void AddOrSet(long telegramUserId, IEnumerable<InstagramObservableParams> instagramObservableParams)
{
foreach (var p in instagramObservableParams)
AddOrSet(telegramUserId, p);
}
}