using Microsoft.Office.Interop.Outlook; using System; using System.Runtime.InteropServices; using System.Threading.Tasks; using Telegram.Bot; namespace OutlookTelegramNotifier { [ComVisible(true)] public class OutlookTelegramNotifier { private Application outlookApp; private TelegramBotClient botClient; private const string TELEGRAM_BOT_TOKEN = "YOUR_BOT_TOKEN"; private const string TELEGRAM_CHANNEL_ID = "YOUR_CHANNEL_ID"; private Timer checkTimer; public OutlookTelegramNotifier() { outlookApp = Globals.ThisAddIn.Application; botClient = new TelegramBotClient(TELEGRAM_BOT_TOKEN); // Запускаем таймер для проверки событий каждую минуту checkTimer = new Timer(CheckUpcomingMeetings, null, 0, 60000); } private async void CheckUpcomingMeetings(object state) { try { var calendar = outlookApp.Session.GetDefaultFolder(OlDefaultFolders.olFolderCalendar); var items = calendar.Items; items.Sort("[Start]"); var now = DateTime.Now; var fifteenMinutesFromNow = now.AddMinutes(15); foreach (AppointmentItem appointment in items) { if (appointment.Start > now && appointment.Start <= fifteenMinutesFromNow) { // Проверяем, не отправляли ли мы уже уведомление для этой встречи if (!appointment.UserProperties["NotificationSent"]?.Value) { await SendTelegramNotification(appointment); // Отмечаем, что уведомление отправлено var prop = appointment.UserProperties.Add("NotificationSent", OlUserPropertyType.olYesNo); prop.Value = true; appointment.Save(); } } } } catch (Exception ex) { // Обработка ошибок System.Diagnostics.Debug.WriteLine($"Error: {ex.Message}"); } } private async Task SendTelegramNotification(AppointmentItem appointment) { var message = $"🔔 Напоминание о встрече\n\n" + $"📅 {appointment.Subject}\n" + $"⏰ Начало: {appointment.Start:HH:mm}\n" + $"📍 {appointment.Location}\n\n" + $"Описание: {appointment.Body.Substring(0, Math.Min(appointment.Body.Length, 100))}..."; await botClient.SendTextMessageAsync( chatId: TELEGRAM_CHANNEL_ID, text: message ); } } }