Overseer and HttpsMessageBuilder
This commit is contained in:
43
DataModels/Config.cs
Normal file
43
DataModels/Config.cs
Normal 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
71
DataModels/DtsodFile.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
35
DataModels/InstagramObservableParams.cs
Normal file
35
DataModels/InstagramObservableParams.cs
Normal 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
84
DataModels/UsersData.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user