Я создаю бота с Bot Framework
, который должен работать в MS Teams
, и я хочу, чтобы он отправлял мне сообщение каждый день в 6:30 утра.
У меня есть метод, который вызывается каждый день в 6:30 из файла Program
.И у меня есть метод, который отправляет сообщение от бота.
Это код моего таймера:
private static Timer _timer;
private static int count = 1;
public static void Main(string[] args)
{
//Initialization of _timer
_timer = new Timer(x => { callTimerMethod(); }, null, Timeout.Infinite, Timeout.Infinite);
Setup_Timer();
BuildWebHost(args).Run();
}
/// <summary>
/// This method will execute every day at 06:30.
/// </summary>
public static void callTimerMethod()
{
System.Diagnostics.Debug.WriteLine(string.Format("Method is called"));
System.Diagnostics.Debug.Write(DateTime.Now.ToString("dddd, dd MMMM yyyy HH:mm:ss"));
count = count + 1;
}
/// <summary>
/// This method will set the timer execution time and will change the
/// tick time of timer.
/// </summary>
private static void Setup_Timer()
{
DateTime currentTime = DateTime.Now;
DateTime timerRunningTime = new DateTime(currentTime.Year, currentTime.Month, currentTime.Day, 6, 30, 0);
timerRunningTime = timerRunningTime.AddDays(1);
double tickTime = (double)(timerRunningTime - DateTime.Now).TotalSeconds;
_timer.Change(TimeSpan.FromSeconds(tickTime),
TimeSpan.FromSeconds(tickTime));
}
И что я хочу заархивировать, так это то, что я хочу изменить содержимоеиз callTimerMethod()
для этого метода:
public async Task AlertSubscribers(ITurnContext turncontext, CancellationToken cancellationToken = default(CancellationToken))
{
using (var db = new DataBaseContext())
{
var msg = "";
var today = DateTime.Today.ToString("dddd");
var product = db linq code;
foreach(var prod in product)
{
msg = $"Reminder! {prod.bla}";
}
// Get the conversation state from the turn context.
var state = await _accessors.CounterState.GetAsync(turncontext, () => new CounterState());
// Set the property using the accessor.
await _accessors.CounterState.SetAsync(turncontext, state);
// Save the new turn count into the conversation state.
await _accessors.ConversationState.SaveChangesAsync(turncontext);
// Echo back to the user whatever msg is.
await turncontext.SendActivityAsync(msg);
}
}
Но я не могу найти способ заархивировать его ... Был бы очень признателен за помощь, я много искал, но не нашел подобной проблемы.
Проблема во всех пространствах имен (например, ITurncontext, Conversationstate и т. Д.)
Надеюсь, что описывает мою проблему ...
Заранее спасибо!
РЕДАКТИРОВАТЬ:
Не обязательно должен быть метод AlertSubscribers()
, но функция или просто код, который делает то же самое.
Я пробовал этот код, но не могу заставить его отправить сообщение пользователю бота (в данном случае это я в эмуляторе):
public static void callTimerMethod()
{
IMessageActivity message = Activity.CreateMessageActivity();
message.Text = "Hello!";
message.TextFormat = "plain";
message.Locale = "en-Us";
message.ChannelId = "emulator";
message.Id = "A guid";
message.InputHint = "acceptingInput";
message.LocalTimestamp = DateTimeOffset.Now;
message.ReplyToId = "A guid";
message.ServiceUrl = "http://localhost:50265";
message.Timestamp = DateTimeOffset.Now;
message.Type = "ConversationUpdate";
message.AsConversationUpdateActivity();
}
Я новичок в ботерамки, так что мой код и мои мысли могут быть неправильными ...