Skip to content

Commit

Permalink
Enhance birthday messages, and application log
Browse files Browse the repository at this point in the history
  • Loading branch information
monambike committed Jun 18, 2024
1 parent f1ecb05 commit 1bae33f
Show file tree
Hide file tree
Showing 12 changed files with 195 additions and 64 deletions.
26 changes: 14 additions & 12 deletions src/Commands/CommandBirthday.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using DSharpPlus.Entities;
using KWiJisho.Config;
using KWiJisho.Utils;
using System;
using System.Collections.Generic;
using System.IO;
Expand Down Expand Up @@ -44,16 +45,14 @@ internal static async Task ExecuteNextBirthdayAsync(DiscordChannel discordChanne

internal static async Task SendBirthdayMessage(DiscordChannel discordChannel, DiscordGuild discordGuild, bool sendOnlyIfTodayBirthday = false)
{
string notFoundBirthdayUser = "Eu sinto muito.. :( eu não consegui encontrar nesse servidor o próximo usuário da lista a fazer aniversário.";

// Getting closest birthday from user present in the server and its member info
var user = Models.Birthday.GetNextUserToMakeBirthday(discordGuild);

// If the user is null, send a message to the Discord channel indicating inability to find the next user in the birthday list.
if (user is null)
{
// Sends the message.
await discordChannel.SendMessageAsync(notFoundBirthdayUser);
await SendMessageBirthdayUserNotFound(discordChannel);
// Return to the method.
return;
}
Expand All @@ -64,8 +63,8 @@ internal static async Task SendBirthdayMessage(DiscordChannel discordChannel, Di
// If the user is null, send a message to the Discord channel indicating inability to find the next user in the birthday list.
if (discordMember is null)
{
// Sends the message.
await discordChannel.SendMessageAsync(notFoundBirthdayUser);
// Sends the message that birthday user wasn't found.
await SendMessageBirthdayUserNotFound(discordChannel);
// Return to the method.
return;
}
Expand All @@ -75,7 +74,11 @@ internal static async Task SendBirthdayMessage(DiscordChannel discordChannel, Di
var upcomingDate = Models.Birthday.GetBirthdayUpcomingDate(daysRemaining);

// Return method if flagged to show only if user's birthday is today, and the birthday is not today.
if (sendOnlyIfTodayBirthday && upcomingDate is not Models.Birthday.BirthdayUpcomingDate.Today) return;
if (sendOnlyIfTodayBirthday && upcomingDate is not Models.Birthday.BirthdayUpcomingDate.Today)
{
await KWiJishoLogs.DefaultLog.AddInfoAsync(KWiJishoLog.Module.Birthday, $@"Birthday message wasn't sent because today is not birthday of ""{discordMember.Username}"".");
return;
}

// Generates birthday message according how many days are remaining for its birthday.
var message = await Models.Birthday.GenerateBirthdayMessage(user);
Expand All @@ -89,10 +92,10 @@ internal static async Task SendBirthdayMessage(DiscordChannel discordChannel, Di
{
Color = ConfigJson.DefaultColor.DiscordColor,
Title = "ANIVERSARIANTE",
Description = $@"O próximo aniversariante é.. {discordMember.Username}!! {message}",
Description = $@"O próximo aniversariante é.. {user.Nickname}!! {message}",
Footer = new DiscordEmbedBuilder.EmbedFooter
{
Text = $"Aniversariante: {discordMember.Username} • Aniversário: {user.Birthday:dd/MM/yyyy}"
Text = $"Aniversariante: {user.FirstName} • Aniversário: {user.Birthday:dd/MM/yyyy}"
}
}
.WithThumbnail($"attachment://{fileName}")
Expand All @@ -116,10 +119,6 @@ internal static async Task ExecuteBirthdayListAsync(DiscordChannel discordChanne
// Getting list of users and their birthday
var users = Models.Birthday.GetBirthdayList();

// Getting image name and image's full path.
var fileName = $"500x281-talking.gif";
var imagePath = Path.GetFullPath($"Resources/Images/{fileName}");

// Initializing discord embed builder
var discordEmbedBuilder = new DiscordEmbedBuilder
{
Expand Down Expand Up @@ -159,5 +158,8 @@ internal static async Task ExecuteBirthdayListAsync(DiscordChannel discordChanne
// Sending the builded embed message
await discordChannel.SendMessageAsync(discordEmbedBuilder);
}

private static async Task SendMessageBirthdayUserNotFound(DiscordChannel discordChannel) =>
await discordChannel.SendMessageAsync("Eu sinto muito.. :( eu não consegui encontrar nesse servidor o próximo usuário da lista a fazer aniversário.");
}
}
3 changes: 2 additions & 1 deletion src/Data/Servers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ internal class Servers
{
GuildId = 737541664318554143,
GeneralChannelId = 737541664775602269,
WelcomeChannelId = 737541664775602269
WelcomeChannelId = 737541664775602269,
LogChannelId = 1252137920995790919
};
}
}
20 changes: 11 additions & 9 deletions src/Data/Users.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,17 @@ internal static class DiscordUsers
/// </summary>
internal static List<User> Users =>
[
new(748963722088677376, new DateTime(2002, 06, 14), "Dark"), // eita_tami
new(256137979335016448, new DateTime(2001, 08, 15), "Orlando"), // fellippeo
new(221419309333741569, new DateTime(2001, 03, 30), "Biel"), // gabstend
new(301152393821814794, new DateTime(2001, 05, 09), "Luiz"), // galo_lpc
new(421101332326383618, new DateTime(2004, 09, 05), "Lívia"), // haruna1686
new(331920695359569922, new DateTime(2000, 11, 08), "Posca"), // p0sc4t
new(207556639719555072, new DateTime(2002, 11, 24), "Vini"), // monambike
new(737573340851470348, new DateTime(2003, 03, 21), "Betty"), // darksidevision
new(737535848102363259, KWiJisho.Created.Date, "KWiJisho") // KWiJisho Bot
new(748963722088677376, new DateTime(2002, 06, 14), "Felipe", "Dark", "tamizinho"), // eita_tami
new(256137979335016448, new DateTime(2001, 08, 15), "Fellippe", "Orlando", "orlandinho"), // fellippeo
new(221419309333741569, new DateTime(2001, 03, 30), "Gabriel", "Biel", "bielzinho"), // gabstend
new(301152393821814794, new DateTime(2001, 05, 09), "Luiz", "Luizão", "louiszon"), // galo_lpc
new(421101332326383618, new DateTime(2004, 09, 05), "Lívia", "Haru", "haruzinha"), // haruna1686
new(331920695359569922, new DateTime(2000, 11, 08), "Filipe", "Posca", "posquete"), // p0sc4t
new(207556639719555072, new DateTime(2002, 11, 24), "Vinícius", "Vini", "vinicin"), // monambike
new(737573340851470348, new DateTime(2003, 03, 21), "Elizabeth", "Betty", "bettyzinha"), // darksidevision
new(352948739029336074, new DateTime(2002, 10, 29), "Matheus", "Mello", "mellinho"), // mello4906
new(352948739029336074, new DateTime(2002, 10, 29), "Maria", "Mari", "freirezika"), // freirezoka
new(737535848102363259, KWiJisho.Created.Date, "KWiJisho", "KWiJisho", "KWiJisho") // KWiJisho Bot
];
}
}
5 changes: 5 additions & 0 deletions src/Entities/Server.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,10 @@ internal class Server()
/// Server birthday role Id.
/// </summary>
internal ulong BirthdayRoleId { get; init; }

/// <summary>
/// Server log channel Id.
/// </summary>
internal ulong LogChannelId { get; init; }
}
}
13 changes: 11 additions & 2 deletions src/Entities/User.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ namespace KWiJisho.Entities
/// <summary>
/// Represents a Discord user along with their identifier and additional information.
/// </summary>
internal class User(ulong id, DateTime born, string identifier)
internal class User(ulong id, DateTime born, string firstName, string nickname, string nicknameVariation)
{
/// <summary>
/// The unique identifier of the user.
Expand All @@ -18,10 +18,19 @@ internal class User(ulong id, DateTime born, string identifier)
/// </summary>
internal DateTime Born => born;

/// <summary>
/// The user real first name.
/// </summary>
internal string FirstName => firstName;

/// <summary>
/// The custom identifier or nickname associated with the user.
/// </summary>
internal string Nickname => nickname;
/// <summary>
/// The custom identifier or nickname associated with the user.
/// </summary>
internal string Identifier => identifier;
internal string NicknameVariation => nicknameVariation;

/// <summary>
/// Gets or sets the user's birthday (if applicable).
Expand Down
53 changes: 39 additions & 14 deletions src/KWIJisho-doc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 4 additions & 2 deletions src/KWiJishoBot.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@
using KWiJisho.Config;
using KWiJisho.Data;
using KWiJisho.Scheduling;
using System;
using System.Collections.Generic;
using KWiJisho.Utils;
using System.Threading.Tasks;

namespace KWiJisho
Expand Down Expand Up @@ -97,6 +96,9 @@ internal async Task RunAsync()
// Creating all schedulers for application jobs.
await Scheduler.CreateAllSchedulers(DiscordClient);

// Instantiating all application logs.
KWiJishoLogs.InstantiateAllLogs(DiscordClient);

// Connecting the bot into the Discord.
await DiscordClient.ConnectAsync();

Expand Down
12 changes: 6 additions & 6 deletions src/Models/Birthday.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,20 +61,20 @@ internal static List<User> GetBirthdayList()
/// <summary>
/// Method responsible for generating a birthday message.
/// </summary>
/// <param name="discordUser">The user that to get the generated birthday message.</param>
/// <param name="user">The user that to get the generated birthday message.</param>
/// <returns>A <see cref="string"/> containing the generated birthday message.</returns>
/// <exception cref="NotImplementedException">Thrown if the upcoming birthday date is not yet implemented on this
/// current method.</exception>
internal static async Task<string> GenerateBirthdayMessage(User discordUser)
internal static async Task<string> GenerateBirthdayMessage(User user)
{
// Getting days remaining for registered user birthday.
var daysRemaning = GetBirthdayDaysRemaining(discordUser);
var daysRemaning = GetBirthdayDaysRemaining(user);
var upcomingBirthdayDate = GetBirthdayUpcomingDate(daysRemaning);
return upcomingBirthdayDate switch
{
BirthdayUpcomingDate.Today => $"Hoje é seu aniversário!! 🥳🎉 {"PARABÉNSS!!!!".ToDiscordBold()} Feliz Aniversário 🎂❤️ {Environment.NewLine + Environment.NewLine} { await ChatGPT.GetKWiJishoPromptAsync($"dê uma mensagem de aniversário especial")} {Environment.NewLine + Environment.NewLine} Gente vem cá! <@&{Servers.Tramontina.BirthdayRoleId}>, {discordUser.Identifier} fez aniversário!",
BirthdayUpcomingDate.Tomorrow => $"{"Amanhá".ToDiscordBold()} já é o aniversário. 🥳🎉",
BirthdayUpcomingDate.InSomeDays => $"Faltam apenas {(daysRemaning + " dias").ToDiscordBold()} para o aniversário!! 👀 Tô ansiosa!!",
BirthdayUpcomingDate.Today => $"Hoje é seu aniversário!! 🥳🎉 {"PARABÉNSS!!!!".ToDiscordBold()} Feliz Aniversário {user.NicknameVariation} 🎂❤️ {Environment.NewLine + Environment.NewLine} { await ChatGPT.GetKWiJishoPromptAsync($"dê uma mensagem de aniversário especial para {user.Nickname}")} {Environment.NewLine + Environment.NewLine} Gente vem cá! <@&{Servers.Tramontina.BirthdayRoleId}>, {user.FirstName} fez aniversário hoje!",
BirthdayUpcomingDate.Tomorrow => $"{"Amanhã".ToDiscordBold()} já é o seu aniversário {user.Nickname}! 🥳🎉 Mal posso esperar!!",
BirthdayUpcomingDate.InSomeDays => $"Faltam apenas {(daysRemaning + " dias").ToDiscordBold()} pra {user.Nickname} fazer aniversário!! 👀 Tô ansiosa!!",
_ => throw new NotImplementedException()
};
}
Expand Down
6 changes: 4 additions & 2 deletions src/Scheduling/BirthdayJob.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using KWiJisho.Commands;
using KWiJisho.Data;
using KWiJisho.Models;
using KWiJisho.Utils;
using Quartz;
using System.Threading.Tasks;

Expand All @@ -21,10 +22,11 @@ internal class BirthdayJob : IJob
/// <returns>A <see cref="Task"/> representing the asynchronous execution of the job.</returns>
public async Task Execute(IJobExecutionContext context)
{
await KWiJishoLogs.DefaultLog.AddInfoAsync(KWiJishoLog.Module.Birthday, "Executing birthday job.");
var dataMap = context.MergedJobDataMap;
_client = (DiscordClient)dataMap.Get("DiscordClient");

_client = (DiscordClient) dataMap.Get("DiscordClient");
await GiveBirthdayMessage();
await KWiJishoLogs.DefaultLog.AddInfoAsync(KWiJishoLog.Module.Birthday, "Finished birthday job.");
}

/// <summary>
Expand Down
12 changes: 12 additions & 0 deletions src/Scheduling/NoticeJob.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace KWiJisho.Scheduling
{
internal class NoticeJob
{
}
}
Loading

0 comments on commit 1bae33f

Please sign in to comment.