Fix BDayGreet and GSMeet outputs
This commit is contained in:
parent
439fc81aab
commit
f0c7c99627
BIN
DiscoBot/299585558710190101-bdaygreet.db
Normal file
BIN
DiscoBot/299585558710190101-bdaygreet.db
Normal file
Binary file not shown.
BIN
DiscoBot/299585558710190101-calendar.db
Normal file
BIN
DiscoBot/299585558710190101-calendar.db
Normal file
Binary file not shown.
BIN
DiscoBot/299585558710190101-gsmeet.db
Normal file
BIN
DiscoBot/299585558710190101-gsmeet.db
Normal file
Binary file not shown.
BIN
DiscoBot/299585558710190101-rss.db
Normal file
BIN
DiscoBot/299585558710190101-rss.db
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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
|
||||||
{
|
{
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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()
|
||||||
|
@ -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
|
||||||
|
@ -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; }
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user