From 712fc319fc730daf92e19b600a9a2b5068b9a0e4 Mon Sep 17 00:00:00 2001 From: kislovdm Date: Thu, 2 Apr 2026 20:52:22 +0300 Subject: [PATCH] ++ --- .env.example | 1 + docker-compose.yml | 14 +++++++------ src/Telegram2VkBot.sln | 25 ++++++++++++++++++++++++ src/Telegram2VkBot/ForwardWorker.cs | 9 ++++----- src/Telegram2VkBot/MappingRepository.cs | 5 +++-- src/Telegram2VkBot/Telegram2VkBot.csproj | 3 +++ src/Telegram2VkBot/appsettings.json | 20 +++++++++++++++++++ 7 files changed, 64 insertions(+), 13 deletions(-) create mode 100644 src/Telegram2VkBot.sln create mode 100644 src/Telegram2VkBot/appsettings.json diff --git a/.env.example b/.env.example index 5df229c..86519a8 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,4 @@ +# Переменные ниже подхватывает docker-compose; в контейнере они маппятся в TELEGRAM__BotToken и т.д. TELEGRAM_BOT_TOKEN=PASTE_TELEGRAM_BOT_TOKEN # Для каналов часто это ID вида -1001234567890 TELEGRAM_CHANNEL_ID=-1001234567890 diff --git a/docker-compose.yml b/docker-compose.yml index 55d0a0b..227d3f0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,12 +7,14 @@ services: restart: unless-stopped env_file: .env environment: - # TELEGRAM__BOT_TOKEN: ${TELEGRAM_BOT_TOKEN} - # TELEGRAM__CHANNEL_ID: ${TELEGRAM_CHANNEL_ID} - # VK__ACCESS_TOKEN: ${VK_ACCESS_TOKEN} - # VK__GROUP_ID: ${VK_GROUP_ID} - # VK__API_VERSION: ${VK_API_VERSION:-5.199} - DB__PATH: /data/mapping.sqlite + # Имена ключей должны совпадать с свойствами Options (BotToken, ChannelId, ...), + # иначе TELEGRAM__BOT_TOKEN попадёт в конфиг как BOT_TOKEN и не забиндится. + TELEGRAM__BotToken: ${TELEGRAM_BOT_TOKEN} + TELEGRAM__ChannelId: ${TELEGRAM_CHANNEL_ID} + VK__AccessToken: ${VK_ACCESS_TOKEN} + VK__GroupId: ${VK_GROUP_ID} + VK__ApiVersion: ${VK_API_VERSION:-5.199} + DB__Path: /data/mapping.sqlite volumes: - ./data:/data diff --git a/src/Telegram2VkBot.sln b/src/Telegram2VkBot.sln new file mode 100644 index 0000000..450d6fb --- /dev/null +++ b/src/Telegram2VkBot.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36705.20 d17.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Telegram2VkBot", "Telegram2VkBot\Telegram2VkBot.csproj", "{4B1C71A4-EEF2-2331-09E5-969F4CE06FCB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4B1C71A4-EEF2-2331-09E5-969F4CE06FCB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4B1C71A4-EEF2-2331-09E5-969F4CE06FCB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4B1C71A4-EEF2-2331-09E5-969F4CE06FCB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4B1C71A4-EEF2-2331-09E5-969F4CE06FCB}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {9C974078-6B64-4FB0-9133-306B105C3385} + EndGlobalSection +EndGlobal diff --git a/src/Telegram2VkBot/ForwardWorker.cs b/src/Telegram2VkBot/ForwardWorker.cs index e3d747d..4e632d7 100644 --- a/src/Telegram2VkBot/ForwardWorker.cs +++ b/src/Telegram2VkBot/ForwardWorker.cs @@ -17,7 +17,6 @@ public sealed class ForwardWorker : BackgroundService public ForwardWorker( IOptions telegram, IOptions vk, - IOptions db, VkApiClient vkApi, MappingRepository repo, ILogger logger) @@ -32,13 +31,13 @@ public sealed class ForwardWorker : BackgroundService protected override async Task ExecuteAsync(CancellationToken stoppingToken) { if (string.IsNullOrWhiteSpace(_telegram.BotToken)) - throw new ArgumentException("TELEGRAM__BOT_TOKEN is empty"); + throw new ArgumentException("TELEGRAM__BotToken (или TELEGRAM:BotToken) пуст — проверьте .env / переменные окружения."); if (_telegram.ChannelId == 0) - throw new ArgumentException("TELEGRAM__CHANNEL_ID must be non-zero (example: -1001234567890)"); + throw new ArgumentException("TELEGRAM__ChannelId должен быть ненулевым (пример: -1001234567890)."); if (string.IsNullOrWhiteSpace(_vk.AccessToken)) - throw new ArgumentException("VK__ACCESS_TOKEN is empty"); + throw new ArgumentException("VK__AccessToken пуст — проверьте .env / переменные окружения."); if (_vk.GroupId == 0) - throw new ArgumentException("VK__GROUP_ID must be non-zero (community id without minus)"); + throw new ArgumentException("VK__GroupId должен быть ненулевым (id сообщества без минуса)."); _logger.LogInformation("Init database"); await _repo.InitializeAsync(stoppingToken); diff --git a/src/Telegram2VkBot/MappingRepository.cs b/src/Telegram2VkBot/MappingRepository.cs index b5655e4..f5a508c 100644 --- a/src/Telegram2VkBot/MappingRepository.cs +++ b/src/Telegram2VkBot/MappingRepository.cs @@ -1,4 +1,5 @@ using Microsoft.Data.Sqlite; +using Microsoft.Extensions.Options; namespace Telegram2VkBot; @@ -7,9 +8,9 @@ public sealed class MappingRepository private readonly DbOptions _dbOptions; private readonly ILogger _logger; - public MappingRepository(DbOptions dbOptions, ILogger logger) + public MappingRepository(IOptions dbOptions, ILogger logger) { - _dbOptions = dbOptions; + _dbOptions = dbOptions.Value; _logger = logger; } diff --git a/src/Telegram2VkBot/Telegram2VkBot.csproj b/src/Telegram2VkBot/Telegram2VkBot.csproj index 4d988c7..6176ea8 100644 --- a/src/Telegram2VkBot/Telegram2VkBot.csproj +++ b/src/Telegram2VkBot/Telegram2VkBot.csproj @@ -6,6 +6,9 @@ + + PreserveNewest + diff --git a/src/Telegram2VkBot/appsettings.json b/src/Telegram2VkBot/appsettings.json new file mode 100644 index 0000000..d4d8d4b --- /dev/null +++ b/src/Telegram2VkBot/appsettings.json @@ -0,0 +1,20 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "TELEGRAM": { + "BotToken": "", + "ChannelId": 0 + }, + "VK": { + "AccessToken": "", + "GroupId": 0, + "ApiVersion": "5.199" + }, + "DB": { + "Path": "data/mapping.sqlite" + } +}