Fix BDayGreet and GSMeet outputs

This commit is contained in:
amki 2019-10-24 03:52:58 +02:00
parent 439fc81aab
commit f0c7c99627
15 changed files with 119 additions and 32 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -191,7 +191,7 @@ namespace DiscoBot
if(commands.ContainsKey(command)) if(commands.ContainsKey(command))
commands[command](message, splits); commands[command](message, splits);
else else
message.Channel.SendMessageAsync("Command not found!"); Console.WriteLine("Command not found!");
}); });
} else } else
{ {

View File

@ -13,5 +13,22 @@ namespace DiscoBot
string Name { get; set; } string Name { get; set; }
void Initialize(); void Initialize();
Task OnNewWebSocketAsync(WebSocket ws, TaskCompletionSource<object> tcs); Task OnNewWebSocketAsync(WebSocket ws, TaskCompletionSource<object> tcs);
string ConcatParameters(string[] parameters)
{
string str = "";
for (var i = 0; i < parameters.Length; ++i)
{
var s = parameters[i];
if (str == "")
{
str += s;
}
else
{
str += " " + s;
}
}
return str;
}
} }
} }

View File

@ -48,7 +48,13 @@ namespace DiscoBot.bdaygreet
updateTimer.AutoReset = false; updateTimer.AutoReset = false;
updateTimer.Elapsed += async (sender, e) => updateTimer.Elapsed += async (sender, e) =>
{ {
await Task.Run(() => HandleBDayCheck()); try
{
await Task.Run(() => HandleBDayCheck());
} catch(Exception)
{
Console.WriteLine("bday: EXCEPTION IN BDAY CHECK");
}
}; };
updateTimer.Start(); updateTimer.Start();
} }
@ -117,20 +123,18 @@ namespace DiscoBot.bdaygreet
var gchan = msg.Channel as IGuildChannel; var gchan = msg.Channel as IGuildChannel;
string name = parameters[1]; string name = parameters[1];
string date = parameters[2]; string date = parameters[2];
SocketGuildUser user; SocketGuildUser user;
try try {
{ var id = MentionUtils.ParseUser(name);
user = guild.Users.Where(u => u.Mention == name).Single(); user = guild.Users.Where(u => u.Id == id).Single();
} } catch(Exception)
catch (InvalidOperationException)
{ {
await msg.Channel.SendMessageAsync("I can't find user " + name + " so I can't add them."); await msg.Channel.SendMessageAsync("I can't find user " + name + " so I can't add them.");
return; return;
} }
DateTimeOffset d; DateTimeOffset d;
try { try {
d = DateTimeOffset.ParseExact(date,new string[] { "dd.MM.", "d.MM", "dd.M", "d.M." }, null, DateTimeStyles.AssumeUniversal); d = DateTimeOffset.ParseExact(date,new string[] { "dd.MM.", "d.MM.", "dd.M", "d.M." }, null, DateTimeStyles.AssumeUniversal);
} catch(FormatException) { } catch(FormatException) {
await msg.Channel.SendMessageAsync("Sorry I can't parse your date. Please try again!"); await msg.Channel.SendMessageAsync("Sorry I can't parse your date. Please try again!");
return; return;
@ -203,7 +207,7 @@ namespace DiscoBot.bdaygreet
return; return;
} }
var gchan = msg.Channel as IGuildChannel; var gchan = msg.Channel as IGuildChannel;
string tag = parameters[1]; string tag = ((IModule)this).ConcatParameters(parameters[1..]);
try try
{ {
var b = bdayGreetContext.BDays.Where(b => b.DiscordTag == tag).Single(); var b = bdayGreetContext.BDays.Where(b => b.DiscordTag == tag).Single();
@ -216,12 +220,14 @@ namespace DiscoBot.bdaygreet
} }
} }
private Task HandleBDayDebugCommand(SocketMessage msg, string[] parameters) private async Task HandleBDayDebugCommand(SocketMessage msg, string[] parameters)
{ {
Console.WriteLine("Handling test command!"); await msg.Channel.SendMessageAsync("DEBUG!");
string para = string.Join(",", parameters); string name = parameters[1];
msg.Channel.SendMessageAsync("Test succeeded. Params: "+para); var id = MentionUtils.ParseUser(name);
return Task.CompletedTask; var user = guild.Users.Where(u => u.Id == id).Single();
await msg.Channel.SendMessageAsync("name: " + name);
await msg.Channel.SendMessageAsync("Found user with id" + user.Id+" and mention "+user.Mention+" Username: "+user.Username+" Discriminator: "+user.Discriminator+" DiscriminiatorValue: "+user.DiscriminatorValue);
} }
public void Initialize() public void Initialize()

View File

@ -32,7 +32,7 @@ namespace DiscoBot.gsmeet
private static readonly string ApplicationName = "DiscoBot"; private static readonly string ApplicationName = "DiscoBot";
private SheetsService service; private SheetsService service;
private Dictionary<string, GSMeetingTimers> meetingTimers = new Dictionary<string, GSMeetingTimers>(); private List<GSMeeting> lastMeetings = null;
@ -73,7 +73,13 @@ namespace DiscoBot.gsmeet
timer.AutoReset = true; timer.AutoReset = true;
timer.Elapsed += async (sender, e) => timer.Elapsed += async (sender, e) =>
{ {
await Task.Run(() => HandleSheetCheck(sheet)); try
{
await Task.Run(() => HandleSheetCheck(sheet));
} catch(Exception ex)
{
Console.WriteLine("gsmeet: EXCEPTION IN SHEET CHECK"+ex);
}
}; };
timer.Start(); timer.Start();
timers.Add(sheet.Db.Name, timer); timers.Add(sheet.Db.Name, timer);
@ -133,6 +139,7 @@ namespace DiscoBot.gsmeet
var binHash = sha1.ComputeHash(Encoding.ASCII.GetBytes(idString)); var binHash = sha1.ComputeHash(Encoding.ASCII.GetBytes(idString));
var hash = BitConverter.ToString(binHash).Replace("-", string.Empty); var hash = BitConverter.ToString(binHash).Replace("-", string.Empty);
meeting.Id = hash; meeting.Id = hash;
meeting.FetchTime = DateTimeOffset.Now;
return meeting; return meeting;
} }
@ -167,6 +174,40 @@ namespace DiscoBot.gsmeet
return meetings; return meetings;
} }
private string MissingStringForEvent(GSMeeting m)
{
var now = DateTimeOffset.Now;
string s = "";
for(var i=0;i<m.Dates.Count;++i)
{
var date = m.Dates[i];
if(date < now || date > now.AddDays(7))
{
continue;
}
var us = "";
foreach (var user in m.Users)
{
if (user.Signups[i] != "1" && user.Signups[i] != "0" && user.Signups[i] != "0.5")
{
if (user.User != null)
{
us = user.User.Mention + " ";
}
else
{
us += user.Name + " ";
}
}
}
if(us != "")
{
s += date + ": "+ us + "\n";
}
}
return s;
}
private async Task HandleSheetCheck(GSSheet sheet) private async Task HandleSheetCheck(GSSheet sheet)
{ {
SocketTextChannel c = guild.Channels.Where(g => g.Id == sheet.Db.Channel).Single() as SocketTextChannel; SocketTextChannel c = guild.Channels.Where(g => g.Id == sheet.Db.Channel).Single() as SocketTextChannel;
@ -176,7 +217,33 @@ namespace DiscoBot.gsmeet
{ {
Console.WriteLine("No values found."); Console.WriteLine("No values found.");
} }
var meetings = await ParseGSMeetSheet(sheet, values); lastMeetings = await ParseGSMeetSheet(sheet, values);
var ln = sheet.Db.LastNotified;
var now = DateTimeOffset.Now;
if(ln.AddDays(1) > now)
{
Console.WriteLine("It is: "+now+" Next notify is: " + ln.AddDays(1));
return;
}
Console.WriteLine("Notifying...");
string missStr = "";
foreach(var meeting in lastMeetings)
{
missStr += MissingStringForEvent(meeting);
}
if(!string.IsNullOrEmpty(missStr))
{
string msg = "Heyo! I found the following missing raid signups:\n";
msg += missStr;
msg += "Please sign up so we can raid! :)";
await c.SendMessageAsync(msg);
}
//TODO FIXME: Remove the hardcode 18 and read meeting timespan from sheet and use this value
var nextDate = now.AddHours(-now.Hour + 18).AddMinutes(-now.Minute).AddSeconds(-now.Second).AddMilliseconds(-now.Millisecond);
Console.WriteLine("Setting next notify to: " + nextDate);
sheet.Db.LastNotified = nextDate;
gsmeetContext.SaveChanges();
/*
foreach(var meeting in meetings) foreach(var meeting in meetings)
{ {
if(!sheet.Timers.ContainsKey(meeting.Id)) if(!sheet.Timers.ContainsKey(meeting.Id))
@ -187,17 +254,6 @@ namespace DiscoBot.gsmeet
sheet.Timers[meeting.Id].UpdateTimers(c, meeting); sheet.Timers[meeting.Id].UpdateTimers(c, meeting);
} }
Console.WriteLine("Parsed sheet " + sheet.Db.Id); Console.WriteLine("Parsed sheet " + sheet.Db.Id);
/*
var str = "";
foreach (var row in values)
{
foreach (var col in row)
{
str += col + "| ";
}
str += "\n";
}
c.SendMessageAsync("Result: " + str);
*/ */
} }
@ -216,6 +272,8 @@ namespace DiscoBot.gsmeet
sheet.Id = sheetId; sheet.Id = sheetId;
sheet.SheetName = sheetName; sheet.SheetName = sheetName;
sheet.LastChecked = DateTimeOffset.Now; sheet.LastChecked = DateTimeOffset.Now;
var now = DateTimeOffset.Now;
sheet.LastNotified = now.AddDays(-1).AddHours(-now.Hour).AddMinutes(-now.Minute).AddSeconds(-now.Second).AddMilliseconds(-now.Millisecond);
sheet.CheckInterval = new TimeSpan(0, 0, timeSec); sheet.CheckInterval = new TimeSpan(0, 0, timeSec);
gsmeetContext.GSheets.Add(sheet); gsmeetContext.GSheets.Add(sheet);
try try

View File

@ -35,6 +35,7 @@ namespace DiscoBot.gsmeet
public ulong Channel { get; set; } public ulong Channel { get; set; }
public TimeSpan CheckInterval { get; set; } public TimeSpan CheckInterval { get; set; }
public DateTimeOffset LastChecked { get; set; } public DateTimeOffset LastChecked { get; set; }
public DateTimeOffset LastNotified { get; set; }
} }
public class GSSheet public class GSSheet
@ -42,10 +43,8 @@ namespace DiscoBot.gsmeet
public GSSheet(DBSheet db) public GSSheet(DBSheet db)
{ {
this.Db = db; this.Db = db;
this.Timers = new Dictionary<string, GSMeetingTimers>();
} }
public DBSheet Db { get; set; } public DBSheet Db { get; set; }
public Dictionary<string, GSMeetingTimers> Timers { get; set; }
} }
public class GSMeetingUser public class GSMeetingUser
@ -68,6 +67,7 @@ namespace DiscoBot.gsmeet
this.Dates = new List<DateTimeOffset>(); this.Dates = new List<DateTimeOffset>();
} }
public string Id { get; set; } public string Id { get; set; }
public DateTimeOffset FetchTime { get; set; }
public List<GSMeetingUser> Users { get; set; } public List<GSMeetingUser> Users { get; set; }
public List<DateTimeOffset> Dates { get; set; } public List<DateTimeOffset> Dates { get; set; }
} }

View File

@ -45,7 +45,13 @@ namespace DiscoBot.rss
timer.AutoReset = true; timer.AutoReset = true;
timer.Elapsed += async (sender, e) => timer.Elapsed += async (sender, e) =>
{ {
await Task.Run(() => HandleFeedCheck(feed)); try
{
await Task.Run(() => HandleFeedCheck(feed));
} catch(Exception)
{
Console.WriteLine("rss: EXCEPTION IN FEED READ!");
}
}; };
timer.Start(); timer.Start();
timers.Add(feed.Name, timer); timers.Add(feed.Name, timer);