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!");
|
||||
discordClient = new DiscordSocketClient();
|
||||
|
||||
|
||||
// DiscoBot
|
||||
await discordClient.LoginAsync(TokenType.Bot, "NTUxNDcxODcxNDcyNjk3MzQ1.D3DVtw.Weh-a3l2XsBGuD5N1-rLKfnZ8wI");
|
||||
// DiscoBot_beta
|
||||
//await discordClient.LoginAsync(TokenType.Bot, "NjM0ODUzOTUzMTY2OTAxMjgw.XaokNQ.Pja5GGV-Hz17TbO7y9WZ6YuPHZE");
|
||||
await discordClient.StartAsync();
|
||||
|
||||
discordClient.Log += Log;
|
||||
|
@ -9,6 +9,7 @@ using System.Timers;
|
||||
using System.Xml;
|
||||
using Discord;
|
||||
using Discord.WebSocket;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace DiscoBot.bdaygreet
|
||||
{
|
||||
@ -17,7 +18,7 @@ namespace DiscoBot.bdaygreet
|
||||
string IModule.Name { get => "BDayGreet"; set => throw new NotImplementedException(); }
|
||||
private SocketGuild guild;
|
||||
private BDayGreetContext bdayGreetContext;
|
||||
private Dictionary<string, Timer> timers = new Dictionary<string, Timer>();
|
||||
private Timer updateTimer = new Timer();
|
||||
private List<WebSocket> webSockets = new List<WebSocket>();
|
||||
|
||||
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;
|
||||
bdayGreetContext = new BDayGreetContext(guild.Id);
|
||||
bdayGreetContext.Database.EnsureCreated();
|
||||
foreach(var f in bdayGreetContext.BDays)
|
||||
{
|
||||
//InitializeFeed(f);
|
||||
}
|
||||
InitializeCheck();
|
||||
|
||||
Commands.Add("bdayadd", HandleBDayAddCommand);
|
||||
Commands.Add("bdaydel", HandleBDayDelCommand);
|
||||
@ -38,24 +36,32 @@ namespace DiscoBot.bdaygreet
|
||||
Commands.Add("bdaydebug", HandleBDayDebugCommand);
|
||||
}
|
||||
|
||||
/*
|
||||
private Task InitializeFeed(BDayUser feed)
|
||||
private void SetTimer()
|
||||
{
|
||||
Console.WriteLine("Found feed " + feed.Name);
|
||||
|
||||
Timer timer = new Timer(feed.CheckInterval.TotalMilliseconds);
|
||||
timer.AutoReset = true;
|
||||
timer.Elapsed += async (sender, e) =>
|
||||
updateTimer.Dispose();
|
||||
var now = DateTime.Now;
|
||||
//DateTimeOffset next = now.AddHours(1).AddMinutes(-now.Minute).AddSeconds(-now.Second);
|
||||
DateTimeOffset next = now.AddMinutes(1).AddSeconds(-now.Second);
|
||||
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();
|
||||
timers.Add(feed.Name, timer);
|
||||
updateTimer.Start();
|
||||
}
|
||||
|
||||
HandleBDayCheck(feed);
|
||||
private Task InitializeCheck()
|
||||
{
|
||||
Console.WriteLine("Starting check timer!");
|
||||
SetTimer();
|
||||
HandleBDayCheck();
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
/*
|
||||
private Task DeinitializeFeed(BDayFeed feed)
|
||||
{
|
||||
Timer t = timers[feed.Name];
|
||||
@ -63,48 +69,42 @@ namespace DiscoBot.bdaygreet
|
||||
timers.Remove(feed.Name);
|
||||
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)
|
||||
{
|
||||
@ -130,25 +130,51 @@ namespace DiscoBot.bdaygreet
|
||||
}
|
||||
DateTimeOffset d;
|
||||
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) {
|
||||
await msg.Channel.SendMessageAsync("Sorry I can't parse your date. Please try again!");
|
||||
return;
|
||||
}
|
||||
await msg.Channel.SendMessageAsync("Add " + name + " on " + d);
|
||||
|
||||
var bday = new BDayUser();
|
||||
bday.DiscordTag = user.Username + "#" + user.DiscriminatorValue;
|
||||
bday.Channel = msg.Channel.Id;
|
||||
bday.BirthDate = d;
|
||||
bday.LastGreet = d.AddYears(-1);
|
||||
bdayGreetContext.Add(bday);
|
||||
bdayGreetContext.SaveChanges();
|
||||
await msg.Channel.SendMessageAsync("I remembered that " + name + "'s next birthday ");
|
||||
if(bday.BirthDate > DateTimeOffset.Now)
|
||||
{
|
||||
bday.NextGreet = bday.BirthDate;
|
||||
} 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)
|
||||
{
|
||||
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();
|
||||
List<string> m = new List<string>();
|
||||
m.Add("I am tracking birthdays for: ");
|
||||
@ -170,6 +196,12 @@ namespace DiscoBot.bdaygreet
|
||||
|
||||
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;
|
||||
string tag = parameters[1];
|
||||
try
|
||||
@ -177,10 +209,10 @@ namespace DiscoBot.bdaygreet
|
||||
var b = bdayGreetContext.BDays.Where(b => b.DiscordTag == tag).Single();
|
||||
bdayGreetContext.Remove(b);
|
||||
bdayGreetContext.SaveChanges();
|
||||
await msg.Channel.SendMessageAsync("Removed birthday " + b.DiscordTag);
|
||||
await msg.Channel.SendMessageAsync("Removed "+ b.DiscordTag+"'s birthday from the database.");
|
||||
} 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 DateTimeOffset BirthDate { 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;
|
||||
t.Elapsed += async (sender, e) =>
|
||||
{
|
||||
string m = "Heyo! There is a raid on "+date+" but";
|
||||
|
||||
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 + "?");
|
||||
m += user.User.Mention + " ";
|
||||
} 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();
|
||||
evt.UserTimers.Add(t);
|
||||
|
Loading…
x
Reference in New Issue
Block a user