Birthday Module deploy
This commit is contained in:
		
							parent
							
								
									cf4ab2a15c
								
							
						
					
					
						commit
						439fc81aab
					
				
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| @ -70,7 +70,10 @@ namespace DiscoBot | |||||||
|             Console.WriteLine("In init!"); |             Console.WriteLine("In init!"); | ||||||
|             discordClient = new DiscordSocketClient(); |             discordClient = new DiscordSocketClient(); | ||||||
|              |              | ||||||
|  |             // DiscoBot | ||||||
|             await discordClient.LoginAsync(TokenType.Bot, "NTUxNDcxODcxNDcyNjk3MzQ1.D3DVtw.Weh-a3l2XsBGuD5N1-rLKfnZ8wI"); |             await discordClient.LoginAsync(TokenType.Bot, "NTUxNDcxODcxNDcyNjk3MzQ1.D3DVtw.Weh-a3l2XsBGuD5N1-rLKfnZ8wI"); | ||||||
|  |             // DiscoBot_beta | ||||||
|  |             //await discordClient.LoginAsync(TokenType.Bot, "NjM0ODUzOTUzMTY2OTAxMjgw.XaokNQ.Pja5GGV-Hz17TbO7y9WZ6YuPHZE"); | ||||||
|             await discordClient.StartAsync(); |             await discordClient.StartAsync(); | ||||||
| 
 | 
 | ||||||
|             discordClient.Log += Log; |             discordClient.Log += Log; | ||||||
|  | |||||||
| @ -9,6 +9,7 @@ using System.Timers; | |||||||
| using System.Xml; | using System.Xml; | ||||||
| using Discord; | using Discord; | ||||||
| using Discord.WebSocket; | using Discord.WebSocket; | ||||||
|  | using Microsoft.EntityFrameworkCore; | ||||||
| 
 | 
 | ||||||
| namespace DiscoBot.bdaygreet | namespace DiscoBot.bdaygreet | ||||||
| { | { | ||||||
| @ -17,7 +18,7 @@ namespace DiscoBot.bdaygreet | |||||||
|         string IModule.Name { get => "BDayGreet"; set => throw new NotImplementedException(); } |         string IModule.Name { get => "BDayGreet"; set => throw new NotImplementedException(); } | ||||||
|         private SocketGuild guild; |         private SocketGuild guild; | ||||||
|         private BDayGreetContext bdayGreetContext; |         private BDayGreetContext bdayGreetContext; | ||||||
|         private Dictionary<string, Timer> timers = new Dictionary<string, Timer>(); |         private Timer updateTimer = new Timer(); | ||||||
|         private List<WebSocket> webSockets = new List<WebSocket>(); |         private List<WebSocket> webSockets = new List<WebSocket>(); | ||||||
| 
 | 
 | ||||||
|         public Dictionary<string, Func<SocketMessage, string[], Task>> Commands { get; set; } = new Dictionary<string, Func<SocketMessage, string[], Task>>(); |         public Dictionary<string, Func<SocketMessage, string[], Task>> Commands { get; set; } = new Dictionary<string, Func<SocketMessage, string[], Task>>(); | ||||||
| @ -27,10 +28,7 @@ namespace DiscoBot.bdaygreet | |||||||
|             this.guild = guild; |             this.guild = guild; | ||||||
|             bdayGreetContext = new BDayGreetContext(guild.Id); |             bdayGreetContext = new BDayGreetContext(guild.Id); | ||||||
|             bdayGreetContext.Database.EnsureCreated(); |             bdayGreetContext.Database.EnsureCreated(); | ||||||
|             foreach(var f in bdayGreetContext.BDays) |             InitializeCheck(); | ||||||
|             { |  | ||||||
|                 //InitializeFeed(f); |  | ||||||
|             } |  | ||||||
| 
 | 
 | ||||||
|             Commands.Add("bdayadd", HandleBDayAddCommand); |             Commands.Add("bdayadd", HandleBDayAddCommand); | ||||||
|             Commands.Add("bdaydel", HandleBDayDelCommand); |             Commands.Add("bdaydel", HandleBDayDelCommand); | ||||||
| @ -38,24 +36,32 @@ namespace DiscoBot.bdaygreet | |||||||
|             Commands.Add("bdaydebug", HandleBDayDebugCommand); |             Commands.Add("bdaydebug", HandleBDayDebugCommand); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         /* |         private void SetTimer() | ||||||
|         private Task InitializeFeed(BDayUser feed) |  | ||||||
|         { |         { | ||||||
|             Console.WriteLine("Found feed " + feed.Name); |             updateTimer.Dispose(); | ||||||
|              |             var now = DateTime.Now; | ||||||
|             Timer timer = new Timer(feed.CheckInterval.TotalMilliseconds); |             //DateTimeOffset next = now.AddHours(1).AddMinutes(-now.Minute).AddSeconds(-now.Second); | ||||||
|             timer.AutoReset = true; |             DateTimeOffset next = now.AddMinutes(1).AddSeconds(-now.Second); | ||||||
|             timer.Elapsed += async (sender, e) => |             var span = next - now; | ||||||
|  |             Console.WriteLine("Next bday timer is: " + next + " in " + span.TotalMilliseconds + "ms."); | ||||||
|  |             updateTimer = new Timer(span.TotalMilliseconds); | ||||||
|  |             updateTimer.AutoReset = false; | ||||||
|  |             updateTimer.Elapsed += async (sender, e) => | ||||||
|             { |             { | ||||||
|                 await Task.Run(() => HandleBDayCheck(feed)); |                 await Task.Run(() => HandleBDayCheck()); | ||||||
|             }; |             }; | ||||||
|             timer.Start(); |             updateTimer.Start(); | ||||||
|             timers.Add(feed.Name, timer); |         } | ||||||
| 
 | 
 | ||||||
|             HandleBDayCheck(feed); |         private Task InitializeCheck() | ||||||
|  |         { | ||||||
|  |             Console.WriteLine("Starting check timer!"); | ||||||
|  |             SetTimer(); | ||||||
|  |             HandleBDayCheck(); | ||||||
|             return Task.CompletedTask; |             return Task.CompletedTask; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         /* | ||||||
|         private Task DeinitializeFeed(BDayFeed feed) |         private Task DeinitializeFeed(BDayFeed feed) | ||||||
|         { |         { | ||||||
|             Timer t = timers[feed.Name]; |             Timer t = timers[feed.Name]; | ||||||
| @ -63,48 +69,42 @@ namespace DiscoBot.bdaygreet | |||||||
|             timers.Remove(feed.Name); |             timers.Remove(feed.Name); | ||||||
|             return Task.CompletedTask; |             return Task.CompletedTask; | ||||||
|         } |         } | ||||||
| 
 |  | ||||||
|         private Task HandleBDayCheck(BDayFeed feed) |  | ||||||
|         { |  | ||||||
|             SocketTextChannel c = guild.Channels.Where(g => g.Id == feed.Channel).Single() as SocketTextChannel; |  | ||||||
|             c.SendMessageAsync("Yes yes i will check."); |  | ||||||
|              |  | ||||||
|             try |  | ||||||
|             { |  | ||||||
|                 XmlReader reader = XmlReader.Create(feed.Url); |  | ||||||
|                 SyndicationFeed f = SyndicationFeed.Load(reader); |  | ||||||
|                 DateTimeOffset newestItem = feed.LastChecked; |  | ||||||
|                 foreach(var item in f.Items) |  | ||||||
|                 { |  | ||||||
|                     if (item.LastUpdatedTime <= feed.LastChecked) |  | ||||||
|                         continue; |  | ||||||
|                     Console.WriteLine("{0}: {1} | {2}", feed.Name, item.LastUpdatedTime, feed.LastChecked); |  | ||||||
|                     List<string> m = new List<string>(); |  | ||||||
|                     m.Add("<" + feed.Name + "> " + item.Title.Text); |  | ||||||
|                     if(item.LastUpdatedTime > newestItem) |  | ||||||
|                     { |  | ||||||
|                         Console.WriteLine("^-- UPDATE!"); |  | ||||||
|                         newestItem = item.LastUpdatedTime; |  | ||||||
|                     } |  | ||||||
|                     foreach (var l in item.Links) |  | ||||||
|                     { |  | ||||||
|                         m.Add(l.Uri.ToString()); |  | ||||||
|                     } |  | ||||||
|                     c.SendMessageAsync(string.Join(" | ", m)); |  | ||||||
|                 } |  | ||||||
|                 feed.LastChecked = newestItem; |  | ||||||
|                 rssContext.SaveChangesAsync(); |  | ||||||
|             } catch(System.Net.WebException e) |  | ||||||
|             { |  | ||||||
|                 c.SendMessageAsync("<" + feed.Name + "> " + "NetworkFailure: " + e.Message); |  | ||||||
|             } catch(XmlException e) |  | ||||||
|             { |  | ||||||
|                 c.SendMessageAsync("<" + feed.Name + "> " + "Malformed Response: " + e.Message); |  | ||||||
|             } |  | ||||||
|              |  | ||||||
|             return Task.CompletedTask; |  | ||||||
|         } |  | ||||||
|         */ |         */ | ||||||
|  |         private async Task HandleBDayCheck() | ||||||
|  |         { | ||||||
|  |             Console.WriteLine("Checktime!"); | ||||||
|  |             var bdays = bdayGreetContext.BDays; | ||||||
|  |             foreach(var bday in bdays) | ||||||
|  |             { | ||||||
|  |                 SocketTextChannel c = guild.Channels.Where(g => g.Id == bday.Channel).Single() as SocketTextChannel; | ||||||
|  |                 //await c.SendMessageAsync("Checking " + bday.DiscordTag + "'s birthday. NextGreet: "+bday.NextGreet); | ||||||
|  |                 var now = DateTimeOffset.Now; | ||||||
|  |                 if(bday.NextGreet < now) | ||||||
|  |                 { | ||||||
|  |                     var call = ""; | ||||||
|  |                     try | ||||||
|  |                     { | ||||||
|  |                         call = guild.Users.Where(gu => (gu.Username + "#" + gu.DiscriminatorValue) == bday.DiscordTag).Single().Mention; | ||||||
|  |                     } | ||||||
|  |                     catch (InvalidOperationException e) | ||||||
|  |                     { | ||||||
|  |                         // Too spammy, do something about it? Don't rely on u.User | ||||||
|  |                         //c.SendMessageAsync("Could not find User "+ u.DiscordTag+" in Discord, cannot mention."); | ||||||
|  |                         call = bday.DiscordTag; | ||||||
|  |                     } | ||||||
|  |                     if (bday.NextGreet.Day == now.Day && bday.NextGreet.Month == now.Month) | ||||||
|  |                     { | ||||||
|  |                         await c.SendMessageAsync("Today is "+call+"'s birthday! Happy Birthday " + call+"!"); | ||||||
|  |                     } else | ||||||
|  |                     { | ||||||
|  |                         await c.SendMessageAsync("Happy belated Birthday " + call+"! I guess I was offline when it happened. :("); | ||||||
|  |                     } | ||||||
|  |                     bday.NextGreet = bday.NextGreet.AddYears(1); | ||||||
|  |                     bdayGreetContext.SaveChanges(); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             SetTimer(); | ||||||
|  |         } | ||||||
| 
 | 
 | ||||||
|         private async Task HandleBDayAddCommand(SocketMessage msg, string[] parameters) |         private async Task HandleBDayAddCommand(SocketMessage msg, string[] parameters) | ||||||
|         { |         { | ||||||
| @ -130,25 +130,51 @@ namespace DiscoBot.bdaygreet | |||||||
|             } |             } | ||||||
|             DateTimeOffset d; |             DateTimeOffset d; | ||||||
|             try { |             try { | ||||||
|                 d = DateTimeOffset.Parse(date, 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; | ||||||
|             }  |             }  | ||||||
|             await msg.Channel.SendMessageAsync("Add " + name + " on " + d); |  | ||||||
|              |              | ||||||
|             var bday = new BDayUser(); |             var bday = new BDayUser(); | ||||||
|             bday.DiscordTag = user.Username + "#" + user.DiscriminatorValue; |             bday.DiscordTag = user.Username + "#" + user.DiscriminatorValue; | ||||||
|             bday.Channel = msg.Channel.Id; |             bday.Channel = msg.Channel.Id; | ||||||
|             bday.BirthDate = d; |             bday.BirthDate = d; | ||||||
|             bday.LastGreet = d.AddYears(-1); |             if(bday.BirthDate > DateTimeOffset.Now) | ||||||
|             bdayGreetContext.Add(bday); |             { | ||||||
|             bdayGreetContext.SaveChanges(); |                 bday.NextGreet = bday.BirthDate; | ||||||
|             await msg.Channel.SendMessageAsync("I remembered that " + name + "'s next birthday "); |             } else | ||||||
|  |             { | ||||||
|  |                 if(bday.BirthDate.Day == DateTimeOffset.Now.Day && bday.BirthDate.Month == DateTimeOffset.Now.Month) | ||||||
|  |                 { | ||||||
|  |                     bday.NextGreet = bday.BirthDate; | ||||||
|  |                 } else | ||||||
|  |                 { | ||||||
|  |                     bday.NextGreet = bday.BirthDate.AddYears(1); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             try | ||||||
|  |             { | ||||||
|  |                 bdayGreetContext.Add(bday); | ||||||
|  |                 bdayGreetContext.SaveChanges(); | ||||||
|  |                 await msg.Channel.SendMessageAsync("I remembered that " + name + "'s next birthday is on " + bday.NextGreet.ToString("dd.MM.yyyy")); | ||||||
|  |             } | ||||||
|  |             catch (InvalidOperationException) | ||||||
|  |             { | ||||||
|  |                 await msg.Channel.SendMessageAsync("I can't add " + name + ". Looks like they are already in the database?"); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         private async Task HandleBDayListCommand(SocketMessage msg, string[] parameters) |         private async Task HandleBDayListCommand(SocketMessage msg, string[] parameters) | ||||||
|         { |         { | ||||||
|  |             var gauthor = guild.Users.Where(u => u.Id == msg.Author.Id).Single(); | ||||||
|  |             if (!gauthor.GuildPermissions.Administrator) | ||||||
|  |             { | ||||||
|  |                 await msg.Channel.SendMessageAsync("Sorry only administrators can list birthdays :("); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|             var bdays = bdayGreetContext.BDays.Where(b => b.Channel == msg.Channel.Id).ToList(); |             var bdays = bdayGreetContext.BDays.Where(b => b.Channel == msg.Channel.Id).ToList(); | ||||||
|             List<string> m = new List<string>(); |             List<string> m = new List<string>(); | ||||||
|             m.Add("I am tracking birthdays for: "); |             m.Add("I am tracking birthdays for: "); | ||||||
| @ -170,6 +196,12 @@ namespace DiscoBot.bdaygreet | |||||||
| 
 | 
 | ||||||
|         private async Task HandleBDayDelCommand(SocketMessage msg, string[] parameters) |         private async Task HandleBDayDelCommand(SocketMessage msg, string[] parameters) | ||||||
|         { |         { | ||||||
|  |             var gauthor = guild.Users.Where(u => u.Id == msg.Author.Id).Single(); | ||||||
|  |             if (!gauthor.GuildPermissions.Administrator) | ||||||
|  |             { | ||||||
|  |                 await msg.Channel.SendMessageAsync("Sorry only administrators can delete birthdays :("); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|             var gchan = msg.Channel as IGuildChannel; |             var gchan = msg.Channel as IGuildChannel; | ||||||
|             string tag = parameters[1]; |             string tag = parameters[1]; | ||||||
|             try |             try | ||||||
| @ -177,10 +209,10 @@ namespace DiscoBot.bdaygreet | |||||||
|                 var b = bdayGreetContext.BDays.Where(b => b.DiscordTag == tag).Single(); |                 var b = bdayGreetContext.BDays.Where(b => b.DiscordTag == tag).Single(); | ||||||
|                 bdayGreetContext.Remove(b); |                 bdayGreetContext.Remove(b); | ||||||
|                 bdayGreetContext.SaveChanges(); |                 bdayGreetContext.SaveChanges(); | ||||||
|                 await msg.Channel.SendMessageAsync("Removed birthday " + b.DiscordTag); |                 await msg.Channel.SendMessageAsync("Removed "+ b.DiscordTag+"'s birthday from the database."); | ||||||
|             } catch(InvalidOperationException) |             } catch(InvalidOperationException) | ||||||
|             { |             { | ||||||
|                 await msg.Channel.SendMessageAsync("Could not find " + tag+"'s birthday. Add it!"); |                 await msg.Channel.SendMessageAsync("Could not find " + tag+"'s birthday."); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -29,7 +29,7 @@ namespace DiscoBot.bdaygreet | |||||||
|         public string DiscordTag { get; set; } |         public string DiscordTag { get; set; } | ||||||
|         public DateTimeOffset BirthDate { get; set; } |         public DateTimeOffset BirthDate { get; set; } | ||||||
|         public ulong Channel { get; set; } |         public ulong Channel { get; set; } | ||||||
|         public DateTimeOffset LastGreet { get; set; } |         public DateTimeOffset NextGreet { get; set; } | ||||||
| 
 | 
 | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -62,18 +62,22 @@ namespace DiscoBot.gsmeet | |||||||
|                     var users = meeting.Users; |                     var users = meeting.Users; | ||||||
|                     t.Elapsed += async (sender, e) => |                     t.Elapsed += async (sender, e) => | ||||||
|                     { |                     { | ||||||
|  |                         string m = "Heyo! There is a raid on "+date+" but"; | ||||||
|  | 
 | ||||||
|                         foreach(var user in users) |                         foreach(var user in users) | ||||||
|                         {                             |                         {                             | ||||||
|                             if(user.Signups[idx] != "1" && user.Signups[idx] != "0" && user.Signups[idx] != "0.5") |                             if(user.Signups[idx] != "1" && user.Signups[idx] != "0" && user.Signups[idx] != "0.5") | ||||||
|                             { |                             { | ||||||
|                                 if(user.User != null) { |                                 if(user.User != null) { | ||||||
|                                     await chan.SendMessageAsync("Hey " + user.User.Mention + " could you please sign up for our raid on " + date + "?"); |                                     m += user.User.Mention + " "; | ||||||
|                                 } else |                                 } else | ||||||
|                                 { |                                 { | ||||||
|                                     await chan.SendMessageAsync("Hey " + user.Name + " could you please sign up for our raid on " + date + "?"); |                                     m += user.Name + " "; | ||||||
|                                 } |                                 } | ||||||
|                             } |                             } | ||||||
|                         } |                         } | ||||||
|  |                         m += "did not sign up for it. Please sign up!"; | ||||||
|  |                         await chan.SendMessageAsync(m); | ||||||
|                     }; |                     }; | ||||||
|                     t.Start(); |                     t.Start(); | ||||||
|                     evt.UserTimers.Add(t); |                     evt.UserTimers.Add(t); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user