000
This commit is contained in:
commit
adbebc37ec
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
bin/
|
||||||
|
obj/
|
||||||
|
/packages/
|
||||||
|
riderModule.iml
|
||||||
|
/_ReSharper.Caches/
|
||||||
10
.idea/.idea.InstaFollowersOverseer/.idea/.gitignore
vendored
Normal file
10
.idea/.idea.InstaFollowersOverseer/.idea/.gitignore
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Rider ignored files
|
||||||
|
/modules.xml
|
||||||
|
/projectSettingsUpdater.xml
|
||||||
|
/.idea.InstaFollowersOverseer.iml
|
||||||
|
/contentModel.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
7
.idea/.idea.InstaFollowersOverseer/.idea/discord.xml
Normal file
7
.idea/.idea.InstaFollowersOverseer/.idea/discord.xml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="DiscordProjectSettings">
|
||||||
|
<option name="show" value="ASK" />
|
||||||
|
<option name="description" value="" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
6
.idea/.idea.InstaFollowersOverseer/.idea/encodings.xml
Normal file
6
.idea/.idea.InstaFollowersOverseer/.idea/encodings.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Encoding">
|
||||||
|
<file url="PROJECT" charset="UTF-8" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
8
.idea/.idea.InstaFollowersOverseer/.idea/indexLayout.xml
Normal file
8
.idea/.idea.InstaFollowersOverseer/.idea/indexLayout.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="UserContentModel">
|
||||||
|
<attachedFolders />
|
||||||
|
<explicitIncludes />
|
||||||
|
<explicitExcludes />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
6
.idea/.idea.InstaFollowersOverseer/.idea/vcs.xml
Normal file
6
.idea/.idea.InstaFollowersOverseer/.idea/vcs.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
57
Config.cs
Normal file
57
Config.cs
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
namespace InstaFollowersOverseer;
|
||||||
|
|
||||||
|
public class Config
|
||||||
|
{
|
||||||
|
|
||||||
|
private const string config_file="config.dtsod";
|
||||||
|
private const string config_example_file="config-example.dtsod";
|
||||||
|
|
||||||
|
public string botToken;
|
||||||
|
public string instagramLogin;
|
||||||
|
public string instagramPassword;
|
||||||
|
|
||||||
|
public Config(DtsodV23 configDtsod)
|
||||||
|
{
|
||||||
|
botToken = configDtsod[nameof(botToken)];
|
||||||
|
instagramLogin = configDtsod[nameof(instagramLogin)];
|
||||||
|
instagramPassword = configDtsod[nameof(instagramPassword)];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Config ReadFromFile()
|
||||||
|
{
|
||||||
|
if (!File.Exists(config_file))
|
||||||
|
{
|
||||||
|
EmbeddedResources.CopyToFile(
|
||||||
|
$"{EmbeddedResourcesPrefix}.{config_example_file}",
|
||||||
|
config_example_file);
|
||||||
|
throw new Exception($"File {config_file} doesnt exist. You have create config. See {config_example_file}");
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Config(new DtsodV23(File.ReadAllText(config_file)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public DtsodV23 ToDtsod()
|
||||||
|
{
|
||||||
|
var d = new DtsodV23
|
||||||
|
{
|
||||||
|
{ nameof(botToken), botToken },
|
||||||
|
{ nameof(instagramLogin), instagramLogin },
|
||||||
|
{ nameof(instagramLogin), instagramLogin }
|
||||||
|
};
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString() => ToDtsod().ToString();
|
||||||
|
|
||||||
|
public void SaveToFile()
|
||||||
|
{
|
||||||
|
File.Copy(config_file,
|
||||||
|
$"backups/{config_file}.old-"+
|
||||||
|
"{DateTime.Now.ToString(MyTimeFormat.ForFileNames)}",
|
||||||
|
true);
|
||||||
|
|
||||||
|
File.OpenWrite(config_file)
|
||||||
|
.FluentWriteString("#DtsodV23\n")
|
||||||
|
.WriteString(ToDtsod().ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
30
InstaFollowersOverseer.csproj
Normal file
30
InstaFollowersOverseer.csproj
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
|
<ImplicitUsings>disable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<LangVersion>preview</LangVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Telegram.Bot" Version="18.0.0" />
|
||||||
|
<PackageReference Include="Telegram.Bots.Extensions.Polling" Version="5.9.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||||
|
<ProjectReference Include="..\DTLib\DTLib.Logging\DTLib.Logging.csproj" />
|
||||||
|
<ProjectReference Include="..\DTLib\DTLib.Dtsod\DTLib.Dtsod.csproj" />
|
||||||
|
<ProjectReference Include="..\DTLib\DTLib\DTLib.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup Condition=" '$(Configuration)' != 'Debug' ">
|
||||||
|
<PackageReference Include="DTLib.Dtsod" Version="1.1.1" />
|
||||||
|
<PackageReference Include="DTLib.Logging" Version="1.1.1" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<None Remove="resources\**\*" />
|
||||||
|
<EmbeddedResource Include="resources\**\*" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
34
InstaFollowersOverseer.sln
Normal file
34
InstaFollowersOverseer.sln
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InstaFollowersOverseer", "InstaFollowersOverseer.csproj", "{719B7EEE-E269-40FF-8C88-A2AD72DDEBC0}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DTLib", "..\DTLib\DTLib\DTLib.csproj", "{16DB4211-CCA7-403D-AE66-10A02FD09780}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DTLib.Dtsod", "..\DTLib\DTLib.Dtsod\DTLib.Dtsod.csproj", "{C1425F7B-776D-45C5-B282-50892241B6E5}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DTLib.Logging", "..\DTLib\DTLib.Logging\DTLib.Logging.csproj", "{B823331A-924B-4F5B-9070-BFFA93DE9E62}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{719B7EEE-E269-40FF-8C88-A2AD72DDEBC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{719B7EEE-E269-40FF-8C88-A2AD72DDEBC0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{719B7EEE-E269-40FF-8C88-A2AD72DDEBC0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{719B7EEE-E269-40FF-8C88-A2AD72DDEBC0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{16DB4211-CCA7-403D-AE66-10A02FD09780}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{16DB4211-CCA7-403D-AE66-10A02FD09780}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{16DB4211-CCA7-403D-AE66-10A02FD09780}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{16DB4211-CCA7-403D-AE66-10A02FD09780}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{C1425F7B-776D-45C5-B282-50892241B6E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{C1425F7B-776D-45C5-B282-50892241B6E5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{C1425F7B-776D-45C5-B282-50892241B6E5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{C1425F7B-776D-45C5-B282-50892241B6E5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{B823331A-924B-4F5B-9070-BFFA93DE9E62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{B823331A-924B-4F5B-9070-BFFA93DE9E62}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{B823331A-924B-4F5B-9070-BFFA93DE9E62}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{B823331A-924B-4F5B-9070-BFFA93DE9E62}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
35
InstagramObservableParams.cs
Normal file
35
InstagramObservableParams.cs
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
namespace InstaFollowersOverseer;
|
||||||
|
|
||||||
|
public class InstagramObservableParams
|
||||||
|
{
|
||||||
|
public string instagramUserId;
|
||||||
|
public bool notifyOnFollowing=true;
|
||||||
|
public bool notifyOnUnfollowing=true;
|
||||||
|
|
||||||
|
public InstagramObservableParams(string instaUserId)
|
||||||
|
{
|
||||||
|
instagramUserId = instaUserId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public InstagramObservableParams(DtsodV23 _overseeParams)
|
||||||
|
{
|
||||||
|
instagramUserId = _overseeParams["instagramUserId"];
|
||||||
|
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(instagramUserId), instagramUserId);
|
||||||
|
if(!notifyOnFollowing)
|
||||||
|
d.Add(nameof(notifyOnFollowing), false);
|
||||||
|
if(!notifyOnUnfollowing)
|
||||||
|
d.Add(nameof(notifyOnFollowing), false);
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString() => ToDtsod().ToString();
|
||||||
|
}
|
||||||
118
Program.cs
Normal file
118
Program.cs
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
global using System;
|
||||||
|
global using System.Threading.Tasks;
|
||||||
|
global using System.Linq;
|
||||||
|
global using System.Collections.Generic;
|
||||||
|
global using DTLib.Filesystem;
|
||||||
|
global using DTLib.Extensions;
|
||||||
|
global using DTLib.Dtsod;
|
||||||
|
global using DTLib.Logging.New;
|
||||||
|
global using File = DTLib.Filesystem.File;
|
||||||
|
global using Directory = DTLib.Filesystem.Directory;
|
||||||
|
global using Path = DTLib.Filesystem.Path;
|
||||||
|
global using static InstaFollowersOverseer.SharedData;
|
||||||
|
using System.Net.Http;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
|
using Telegram.Bot;
|
||||||
|
using Telegram.Bot.Polling;
|
||||||
|
using Telegram.Bot.Types;
|
||||||
|
using Telegram.Bot.Types.Enums;
|
||||||
|
|
||||||
|
namespace InstaFollowersOverseer;
|
||||||
|
|
||||||
|
static class Program
|
||||||
|
{
|
||||||
|
static void Main()
|
||||||
|
{
|
||||||
|
Console.InputEncoding=Encoding.UTF8;
|
||||||
|
Console.OutputEncoding=Encoding.UTF8;
|
||||||
|
DTLibInternalLogging.SetLogger(MainLogger.ParentLogger);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
config = Config.ReadFromFile();
|
||||||
|
userSettings = UserSettings.ReadFromFile();
|
||||||
|
|
||||||
|
CancellationTokenSource mainCancel = new CancellationTokenSource();
|
||||||
|
Console.CancelKeyPress += (_, e) =>
|
||||||
|
{
|
||||||
|
mainCancel.Cancel();
|
||||||
|
Thread.Sleep(1000);
|
||||||
|
MainLogger.LogInfo("all have cancelled");
|
||||||
|
e.Cancel = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
var bot = new TelegramBotClient(config.botToken, new HttpClient());
|
||||||
|
var receiverOptions = new ReceiverOptions
|
||||||
|
{
|
||||||
|
AllowedUpdates = { }, // receive all update types
|
||||||
|
|
||||||
|
};
|
||||||
|
bot.StartReceiving(BotApiUpdateHandler, BotApiExceptionHandler, receiverOptions, mainCancel.Token);
|
||||||
|
|
||||||
|
Task.Delay(-1, mainCancel.Token).GetAwaiter().GetResult();
|
||||||
|
Thread.Sleep(1000);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
MainLogger.LogError(ex);
|
||||||
|
}
|
||||||
|
Console.ResetColor();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ContextLogger botLogger = new ContextLogger("bot", MainLogger.ParentLogger);
|
||||||
|
|
||||||
|
static async Task BotApiUpdateHandler(ITelegramBotClient bot, Update update, CancellationToken cls)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
switch (update.Type)
|
||||||
|
{
|
||||||
|
case UpdateType.Message:
|
||||||
|
{
|
||||||
|
var message = update.Message!;
|
||||||
|
if (message.Text!.StartsWith('/'))
|
||||||
|
{
|
||||||
|
botLogger.LogInfo($"user {message.Chat.Id} sent command {message.Text}");
|
||||||
|
var spl = message.Text.SplitToList(' ');
|
||||||
|
string command = spl[0].Substring(1);
|
||||||
|
spl.RemoveAt(0);
|
||||||
|
string[] args = spl.ToArray();
|
||||||
|
switch (command)
|
||||||
|
{
|
||||||
|
case "start":
|
||||||
|
await bot.SendTextMessageAsync(message.Chat, "hi");
|
||||||
|
break;
|
||||||
|
case "oversee":
|
||||||
|
break;
|
||||||
|
// default:
|
||||||
|
// throw new BotCommandException(command, args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else botLogger.LogDebug($"message recieved: {message.Text}");
|
||||||
|
|
||||||
|
break;
|
||||||
|
} /*
|
||||||
|
case UpdateType.EditedMessage:
|
||||||
|
break;
|
||||||
|
case UpdateType.InlineQuery:
|
||||||
|
break;
|
||||||
|
case UpdateType.ChosenInlineResult:
|
||||||
|
break;
|
||||||
|
case UpdateType.CallbackQuery:
|
||||||
|
break;*/
|
||||||
|
default:
|
||||||
|
botLogger.LogWarn($"unknown update type: {update.Type}");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
botLogger.LogWarn("UpdateHandler", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static Task BotApiExceptionHandler(ITelegramBotClient bot, Exception ex, CancellationToken cls)
|
||||||
|
{
|
||||||
|
botLogger.LogError(ex);
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
}
|
||||||
16
SharedData.cs
Normal file
16
SharedData.cs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
namespace InstaFollowersOverseer;
|
||||||
|
|
||||||
|
public static class SharedData
|
||||||
|
{
|
||||||
|
internal const string EmbeddedResourcesPrefix = "InstaFollowersOverseer.resources";
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
internal static Config config;
|
||||||
|
internal static UserSettings userSettings;
|
||||||
|
#nullable enable
|
||||||
|
|
||||||
|
public static readonly ContextLogger MainLogger = new ContextLogger("main",new CompositeLogger(
|
||||||
|
new ConsoleLogger(),
|
||||||
|
new FileLogger("logs","InstaFollowersOverseer"))
|
||||||
|
);
|
||||||
|
}
|
||||||
114
UserSettings.cs
Normal file
114
UserSettings.cs
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
namespace InstaFollowersOverseer;
|
||||||
|
|
||||||
|
public class UserSettings
|
||||||
|
{
|
||||||
|
private const string user_settings_file="user-settings.dtsod";
|
||||||
|
private const string user_settings_example_file="user-settings-example.dtsod";
|
||||||
|
|
||||||
|
private Dictionary<string, List<InstagramObservableParams>> userSettings=new();
|
||||||
|
|
||||||
|
private UserSettings()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserSettings(DtsodV23 _userSettings)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
foreach (var uset in _userSettings)
|
||||||
|
{
|
||||||
|
string telegramUserId = uset.Key;
|
||||||
|
|
||||||
|
List<InstagramObservableParams> oparams = new List<InstagramObservableParams>();
|
||||||
|
foreach (DtsodV23 _overseeParams in uset.Value)
|
||||||
|
oparams.Add(new InstagramObservableParams(_overseeParams));
|
||||||
|
|
||||||
|
userSettings.Add(telegramUserId, oparams);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
throw new Exception($"your {user_settings_file} format is invalid\n"
|
||||||
|
+ $"See {user_settings_example_file}", innerException:ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static UserSettings ReadFromFile()
|
||||||
|
{
|
||||||
|
EmbeddedResources.CopyToFile(
|
||||||
|
$"{EmbeddedResourcesPrefix}.{user_settings_example_file}",
|
||||||
|
user_settings_example_file);
|
||||||
|
|
||||||
|
if (File.Exists(user_settings_file))
|
||||||
|
return new UserSettings(new DtsodV23(File.ReadAllText(user_settings_file)));
|
||||||
|
|
||||||
|
MainLogger.LogWarn($"file {user_settings_file} doesnt exist, creating new");
|
||||||
|
File.WriteAllText(user_settings_file,"#DtsodV23\n");
|
||||||
|
return new UserSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
public DtsodV23 ToDtsod()
|
||||||
|
{
|
||||||
|
var b = new DtsodV23();
|
||||||
|
foreach (var userS in userSettings)
|
||||||
|
b.Add(userS.Key,
|
||||||
|
userS.Value.Select(iop =>
|
||||||
|
iop.ToDtsod()
|
||||||
|
).ToList());
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString() => ToDtsod().ToString();
|
||||||
|
|
||||||
|
public void SaveToFile()
|
||||||
|
{
|
||||||
|
File.Copy(user_settings_file,
|
||||||
|
$"backups/{user_settings_file}.old-"+
|
||||||
|
"{DateTime.Now.ToString(MyTimeFormat.ForFileNames)}",
|
||||||
|
true);
|
||||||
|
|
||||||
|
File.OpenWrite(user_settings_file)
|
||||||
|
.FluentWriteString("#DtsodV23\n")
|
||||||
|
.WriteString(ToDtsod().ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<InstagramObservableParams> Get(string telegramUserId)
|
||||||
|
{
|
||||||
|
if (!userSettings.TryGetValue(telegramUserId, out var overseeParams))
|
||||||
|
throw new Exception($"there is no settings for user {telegramUserId}");
|
||||||
|
return overseeParams;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddOrSet(string telegramUserId, InstagramObservableParams instagramObservableParams)
|
||||||
|
{
|
||||||
|
// Add
|
||||||
|
// doesnt contain settings for telegramUserId
|
||||||
|
if (!userSettings.TryGetValue(telegramUserId, out var thisUserSettings))
|
||||||
|
{
|
||||||
|
userSettings.Add(telegramUserId, new (){ instagramObservableParams });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set
|
||||||
|
// settings for telegramUserId contain InstagramObservableParams with instagramObservableParams.instagramUserId
|
||||||
|
for (var i = 0; i < thisUserSettings.Count; i++)
|
||||||
|
{
|
||||||
|
if (thisUserSettings[i].instagramUserId == instagramObservableParams.instagramUserId)
|
||||||
|
{
|
||||||
|
thisUserSettings[i] = instagramObservableParams;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add
|
||||||
|
// doesnt contain InstagramObservableParams with instagramObservableParams.instagramUserId
|
||||||
|
thisUserSettings.Add(instagramObservableParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddOrSet(string telegramUserId, IEnumerable<InstagramObservableParams> instagramObservableParams)
|
||||||
|
{
|
||||||
|
foreach (var p in instagramObservableParams)
|
||||||
|
AddOrSet(telegramUserId, p);
|
||||||
|
}
|
||||||
|
}
|
||||||
4
resources/config-example.dtsod
Normal file
4
resources/config-example.dtsod
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
#DtsodV23
|
||||||
|
botToken:"19815858:aAjfawIAHAWw4_kAkg321";
|
||||||
|
instagramLogin:"aboba";
|
||||||
|
instagramPassword:"01234567";
|
||||||
11
resources/user-settings-example.dtsod
Normal file
11
resources/user-settings-example.dtsod
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#DtsodV23
|
||||||
|
|
||||||
|
telegramUserId: [
|
||||||
|
{
|
||||||
|
instagramUserId: "taldybayeff";
|
||||||
|
# optional, default: true
|
||||||
|
notifyOnFollowing: true;
|
||||||
|
# optional, default: true
|
||||||
|
notifyOnUnfollowing: true;
|
||||||
|
}
|
||||||
|
];
|
||||||
Loading…
Reference in New Issue
Block a user