added support for .env file and improved validation
This commit is contained in:
45
Program.cs
45
Program.cs
@@ -10,6 +10,8 @@ public class MastodonBot
|
||||
|
||||
private static async Task Main()
|
||||
{
|
||||
DotNetEnv.Env.Load();
|
||||
|
||||
// Configure logging
|
||||
using var loggerFactory = LoggerFactory.Create(builder =>
|
||||
{
|
||||
@@ -17,8 +19,12 @@ public class MastodonBot
|
||||
});
|
||||
var logger = loggerFactory.CreateLogger<MastodonBot>();
|
||||
|
||||
if(!CheckEnv.IsValid()){
|
||||
logger.LogCritical("Error reading envinonment variables, either some values are missing or no .env file was found");
|
||||
throw new Exception("Error reading envinonment variables, either some values are missing or no .env file was found");
|
||||
}
|
||||
// Setup DB
|
||||
var db = await DbInitializer.SetupDb(Environment.GetEnvironmentVariable("DB_NAME"));
|
||||
var db = await DbInitializer.SetupDb(DotNetEnv.Env.GetString("DB_NAME"));
|
||||
if (db == null)
|
||||
{
|
||||
logger.LogCritical("Unable to setup DB");
|
||||
@@ -27,26 +33,31 @@ public class MastodonBot
|
||||
logger.LogInformation("DB setup done");
|
||||
|
||||
// Setup bot
|
||||
var bot = new TelegramBotClient(Environment.GetEnvironmentVariable("BOT_TOKEN"));
|
||||
var me = await bot.GetMeAsync();
|
||||
await bot.DropPendingUpdatesAsync();
|
||||
logger.LogInformation($"Bot is running as {me.FirstName}.");
|
||||
|
||||
bot.OnUpdate += OnUpdate;
|
||||
var bot = new TelegramBotClient(DotNetEnv.Env.GetString("BOT_TOKEN"));
|
||||
|
||||
// Handle bot updates
|
||||
async Task OnUpdate(Update update)
|
||||
{
|
||||
switch (update)
|
||||
var me = await bot.GetMeAsync();
|
||||
await bot.DropPendingUpdatesAsync();
|
||||
bot.OnUpdate += OnUpdate;
|
||||
|
||||
logger.LogInformation($"Bot is running as {me.FirstName}.");
|
||||
|
||||
|
||||
|
||||
// Handle bot updates
|
||||
async Task OnUpdate(Update update)
|
||||
{
|
||||
case { CallbackQuery: { } callbackQuery }: await HandlePostAction.HandleCallbackQuery(callbackQuery,db,bot, logger); break;
|
||||
default: logger.LogInformation($"Received unhandled update {update.Type}"); break;
|
||||
};
|
||||
}
|
||||
switch (update)
|
||||
{
|
||||
case { CallbackQuery: { } callbackQuery }: await HandlePostAction.HandleCallbackQuery(callbackQuery, db, bot, logger); break;
|
||||
default: logger.LogInformation($"Received unhandled update {update.Type}"); break;
|
||||
};
|
||||
}
|
||||
|
||||
// Set a timer to fetch and process posts every 15 minutes
|
||||
_timer = new Timer(async _ => await RunCheck.runAsync(db, bot, DotNetEnv.Env.GetString("TAG"), logger, DotNetEnv.Env.GetString("CUSTOM_INSTANCE")), null, TimeSpan.Zero, TimeSpan.FromMinutes(15));
|
||||
Console.ReadLine();
|
||||
|
||||
// Set a timer to fetch and process posts every 15 minutes
|
||||
_timer = new Timer(async _ => await RunCheck.runAsync(db, bot, Environment.GetEnvironmentVariable("TAG"),logger,Environment.GetEnvironmentVariable("CUSTOM_INSTANCE")), null, TimeSpan.Zero, TimeSpan.FromMinutes(15));
|
||||
Console.ReadLine();
|
||||
|
||||
}
|
||||
|
||||
|
21
Services/CheckEnv.cs
Normal file
21
Services/CheckEnv.cs
Normal file
@@ -0,0 +1,21 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace mstdnCats.Services
|
||||
{
|
||||
public class CheckEnv
|
||||
{
|
||||
public static Boolean IsValid(){
|
||||
if (DotNetEnv.Env.GetString("DB_NAME") == null ||
|
||||
DotNetEnv.Env.GetString("BOT_TOKEN") == null ||
|
||||
DotNetEnv.Env.GetString("TAG") == null ||
|
||||
DotNetEnv.Env.GetString("CHANNEL_NUMID") == null ||
|
||||
DotNetEnv.Env.GetString("ADMIN_NUMID") == null ){
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
@@ -9,19 +9,22 @@ namespace mstdnCats.Services
|
||||
{
|
||||
// Setup DB
|
||||
IDocumentCollection<Post>? collection = null;
|
||||
|
||||
try
|
||||
if (_dbname != null)
|
||||
{
|
||||
// Initialize DB
|
||||
var store = new DataStore($"{_dbname}.json", minifyJson: false);
|
||||
collection = store.GetCollection<Post>();
|
||||
}
|
||||
catch
|
||||
{
|
||||
return Task.FromResult<IDocumentCollection<Post>>(null);
|
||||
}
|
||||
try
|
||||
{
|
||||
// Initialize DB
|
||||
var store = new DataStore($"{_dbname}.json", minifyJson: false);
|
||||
collection = store.GetCollection<Post>();
|
||||
}
|
||||
catch
|
||||
{
|
||||
return Task.FromResult<IDocumentCollection<Post>>(null);
|
||||
}
|
||||
|
||||
// Return collection
|
||||
// Return collection
|
||||
return Task.FromResult(collection);
|
||||
}
|
||||
return Task.FromResult(collection);
|
||||
}
|
||||
}
|
||||
|
@@ -44,7 +44,7 @@ namespace mstdnCats.Services
|
||||
if (updated)
|
||||
{
|
||||
// Send the media attachment to the channel
|
||||
await _bot.SendPhotoAsync(Environment.GetEnvironmentVariable("CHANNEL_NUMID"), post.MediaAttachments.First().Url, caption: $"Post from " + $"<a href=\"" + post.Account.Url + "\">" + post.Account.DisplayName + " </a>", parseMode: ParseMode.Html
|
||||
await _bot.SendPhotoAsync(DotNetEnv.Env.GetString("CHANNEL_NUMID"), post.MediaAttachments.First().Url, caption: $"Post from " + $"<a href=\"" + post.Account.Url + "\">" + post.Account.DisplayName + " </a>", parseMode: ParseMode.Html
|
||||
, replyMarkup: new InlineKeyboardMarkup(InlineKeyboardButton.WithUrl("View on Mastodon", post.Url)));
|
||||
|
||||
await _bot.AnswerCallbackQueryAsync(callbackQuery.Id, "Media attachment approved and sent to channel.");
|
||||
|
@@ -24,7 +24,7 @@ namespace mstdnCats.Services
|
||||
// Send approve or reject message to admin
|
||||
foreach (var media in post.MediaAttachments)
|
||||
{
|
||||
await _bot.SendPhotoAsync(Environment.GetEnvironmentVariable("ADMIN_NUMID"), media.PreviewUrl, caption: $"<a href=\"" + post.Url + "\"> Mastodon </a>", parseMode: ParseMode.Html
|
||||
await _bot.SendPhotoAsync(DotNetEnv.Env.GetString("ADMIN_NUMID"), media.PreviewUrl, caption: $"<a href=\"" + post.Url + "\"> Mastodon </a>", parseMode: ParseMode.Html
|
||||
, replyMarkup: new InlineKeyboardMarkup().AddButton("Approve", $"approve-{media.MediaId}").AddButton("Reject", $"reject-{media.MediaId}"));
|
||||
|
||||
}
|
||||
|
@@ -9,6 +9,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="DotNetEnv" Version="3.1.1" />
|
||||
<PackageReference Include="JsonFlatFileDataStore" Version="2.4.2" />
|
||||
<PackageReference Include="Telegram.Bot" Version="21.11.0" />
|
||||
</ItemGroup>
|
||||
|
Reference in New Issue
Block a user