You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
3.5 KiB
95 lines
3.5 KiB
using Discord.WebSocket;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using System.Timers;
|
|
|
|
namespace DiscoBot.gsmeet
|
|
{
|
|
public class GSMeetingTimers
|
|
{
|
|
private List<TimeSpan> WarningTimes = new List<TimeSpan> {
|
|
new TimeSpan(2, 0, 0, 0),
|
|
new TimeSpan(1, 0, 0, 0) };
|
|
private List<TimeSpan> UserTimes = new List<TimeSpan> {
|
|
new TimeSpan(7, 0, 0, 0),
|
|
new TimeSpan(6, 0, 0, 0),
|
|
new TimeSpan(5, 0, 0, 0),
|
|
new TimeSpan(4, 0, 0, 0),
|
|
new TimeSpan(3, 0, 0, 0) };
|
|
private Dictionary<DateTimeOffset, GSEventTimers> events = new Dictionary<DateTimeOffset, GSEventTimers>();
|
|
public GSMeetingTimers()
|
|
{
|
|
}
|
|
public void UpdateTimers(SocketTextChannel chan, GSMeeting meeting)
|
|
{
|
|
for(var i=0;i<meeting.Dates.Count;++i)
|
|
{
|
|
var date = meeting.Dates[i];
|
|
// Keep this so we can use it to pick from user.Signups later! (async)
|
|
var idx = i;
|
|
GSEventTimers evt;
|
|
if(events.ContainsKey(date))
|
|
{
|
|
evt = events[date];
|
|
} else
|
|
{
|
|
evt = new GSEventTimers();
|
|
events.Add(date, evt);
|
|
}
|
|
|
|
foreach(var t in evt.UserTimers)
|
|
{
|
|
t.Dispose();
|
|
}
|
|
|
|
evt.UserTimers = new List<Timer>();
|
|
|
|
foreach(var ts in UserTimes)
|
|
{
|
|
var when = date - ts;
|
|
if(when < DateTimeOffset.Now)
|
|
{
|
|
continue;
|
|
}
|
|
Console.WriteLine("Setting a timer for " + when + " for evt " + date);
|
|
var whents = when - DateTimeOffset.Now;
|
|
// Debug resolve timers after 30s
|
|
//Timer t = new Timer(new TimeSpan(0, 0, 30).TotalMilliseconds);
|
|
Timer t = new Timer(whents.TotalMilliseconds);
|
|
t.AutoReset = false;
|
|
var users = meeting.Users;
|
|
t.Elapsed += async (sender, e) =>
|
|
{
|
|
foreach(var user in users)
|
|
{
|
|
if(user.Signups[idx] != "1" && user.Signups[idx] != "0" && user.Signups[idx] != "0.5")
|
|
{
|
|
if(user.User != null) {
|
|
await chan.SendMessageAsync("Hey " + user.User.Mention + " could you please sign up for our raid on " + date + "?");
|
|
} else
|
|
{
|
|
await chan.SendMessageAsync("Hey " + user.Name + " could you please sign up for our raid on " + date + "?");
|
|
}
|
|
}
|
|
}
|
|
};
|
|
t.Start();
|
|
evt.UserTimers.Add(t);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public class GSEventTimers
|
|
{
|
|
public GSEventTimers()
|
|
{
|
|
this.UserTimers = new List<Timer>();
|
|
this.WarningTimers = new List<Timer>();
|
|
}
|
|
public List<Timer> UserTimers { get; set; }
|
|
public List<Timer> WarningTimers { get; set; }
|
|
}
|
|
}
|
|
|