Birthday Module deploy
This commit is contained in:
parent
cf4ab2a15c
commit
439fc81aab
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -69,8 +69,11 @@ 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