Compare commits

...

3 Commits

Author SHA1 Message Date
Anya eebc73ac0c 0.6.0-pre
This changes all commands to use EmbedUI.
This also changes most commands to give more info about what parameters the user sent.
2022-03-29 04:52:52 -07:00
Anya e291c7d2d8 Added EmbedUI
This is a reference class for creating embeds.
It contains common strings & colors for use in commands and listeners.
2022-03-29 03:33:03 -07:00
Anya b8e0b9a1c8 Update readme.md 2022-03-28 23:24:25 -07:00
10 changed files with 166 additions and 129 deletions

View File

@ -7,7 +7,7 @@
<groupId>moe.oko</groupId> <groupId>moe.oko</groupId>
<artifactId>Kiafumi</artifactId> <artifactId>Kiafumi</artifactId>
<name>Kiafumi</name> <name>Kiafumi</name>
<version>0.5</version> <version>0.6.0-pre</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<url>https://oko.moe/kiafumi.htm</url> <url>https://oko.moe/kiafumi.htm</url>

View File

@ -1,13 +1,23 @@
# Kiafumi # Kiafumi
A kitchen-sink discord bot designed to replace [Skyra](https://skyra.pw) v7 for use in the [HC](https://discord.gg/utgAEV2) network. A kitchen-sink discord bot designed to replace [Skyra](https://skyra.pw) v7 for use in the [HC](https://discord.gg/utgAEV2) network.
It's written in [JDA](https://github.com/DV8FromTheWorld/JDA) and is intended to be resource conscious where possible. It's written in Java, using [JDA](https://github.com/DV8FromTheWorld/JDA). User feedback is greatly encouraged!
### Credits & Thanks ### Credits & Thanks
+ [oko](https://oko.moe) (Development + Moral Support) + [oko](https://oko.moe) (Development + Moral Support)
+ [Tiddy](https://tiddy.oko.moe) (Development + Being an Angel) + [Tiddy](https://tiddy.oko.moe) (Development + Being an Angel)
+ [Laika](http://alpinia.link) (Development + Java Shenanigans) + [Laika](http://alpinia.link) (Development + Java Shenanigans)
+ [Favna](https://favware.tech), for maintaining [Ribbon](https://github.com/favna/ribbon) from 2017-2019, & Skyra to this day! + [Favna](https://favware.tech), for maintaining [Ribbon](https://github.com/favna/ribbon) from 2017-2019, & Skyra to this day!
### Installation
1. Download from the [Releases](https://fem.mint.lgbt/oko/kiafumi/releases), or compile with `mvn clean package`.
2. Run `Kiafumi-x.x.jar` in an empty directory.
3. Create a new MariaDB(**Not** MySQL) database.
4. Open and configure the generated `config.yml`.
5. Run `Kiafumi-x.x.jar` again.
### License ### License
Copyright © 2022 oko, under the [ISC License](./LICENSE) Copyright © 2022 oko, under the [ISC License](./LICENSE)

View File

@ -5,6 +5,7 @@ import moe.oko.Kiafumi.listener.MainListener;
import moe.oko.Kiafumi.model.KiafumiDB; import moe.oko.Kiafumi.model.KiafumiDB;
import moe.oko.Kiafumi.model.ServerManager; import moe.oko.Kiafumi.model.ServerManager;
import moe.oko.Kiafumi.util.CommandInfo; import moe.oko.Kiafumi.util.CommandInfo;
import moe.oko.Kiafumi.util.EmbedUI;
import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder; import net.dv8tion.jda.api.JDABuilder;
@ -20,7 +21,6 @@ import org.simpleyaml.configuration.file.YamlConfiguration;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.awt.Color;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.InputStream; import java.io.InputStream;
@ -173,11 +173,11 @@ public class Kiafumi {
info("Loaded " + activeCommands.size() + " commands."); info("Loaded " + activeCommands.size() + " commands.");
EmbedBuilder eb = new EmbedBuilder() EmbedBuilder eb = new EmbedBuilder()
.setTitle("Kiafumi Online") .setColor(EmbedUI.SUCCESS)
.setAuthor("Kiafumi", null, Kiafumi.JDA.getSelfUser().getAvatarUrl())
.setTitle("Online")
.setFooter("Created by Oko, Laika, and Tiddy") .setFooter("Created by Oko, Laika, and Tiddy")
.setColor(new Color(0x6271c1)) .setTimestamp(ZonedDateTime.now());
.setTimestamp(ZonedDateTime.now())
.setAuthor("Kiafumi!", null, Kiafumi.JDA.getSelfUser().getAvatarUrl());
JDA.getTextChannelById(config.getLogChannel()).sendMessageEmbeds(eb.build()).queue(); JDA.getTextChannelById(config.getLogChannel()).sendMessageEmbeds(eb.build()).queue();
} }

View File

@ -1,6 +1,7 @@
package moe.oko.Kiafumi.command; package moe.oko.Kiafumi.command;
import moe.oko.Kiafumi.util.CommandInfo; import moe.oko.Kiafumi.util.CommandInfo;
import moe.oko.Kiafumi.util.EmbedUI;
import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.entities.User; import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
@ -8,15 +9,15 @@ import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.interactions.commands.OptionMapping; import net.dv8tion.jda.api.interactions.commands.OptionMapping;
import net.dv8tion.jda.api.interactions.commands.OptionType; import net.dv8tion.jda.api.interactions.commands.OptionType;
import java.awt.*;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
// TODO: Make this actually a Dreidel, and use this code for a fight command.
public class DreidelCommand extends CommandClass { public class DreidelCommand extends CommandClass {
private boolean enabled = true; private boolean enabled = false;
@Override @Override
public boolean isEnabled() { public boolean isEnabled() {
return enabled; return enabled;
@ -34,31 +35,30 @@ public class DreidelCommand extends CommandClass {
@Override @Override
public void newCommand(String name, SlashCommandInteractionEvent e) { public void newCommand(String name, SlashCommandInteractionEvent e) {
switch (name) { if ("dreidel".equals(name)) {
case "dreidel": e.deferReply().queue();
e.deferReply().queue(); List<User> usersForRng = new ArrayList<>();
List<User> usersForRng = new ArrayList<>(); for (OptionMapping option : e.getOptions()) {
for(OptionMapping option : e.getOptions()) { usersForRng.add(option.getAsUser());
usersForRng.add(option.getAsUser()); }
} //Done, now roll
//Done, now roll EmbedBuilder eb = new EmbedBuilder()
EmbedBuilder eb = new EmbedBuilder() .setColor(EmbedUI.INFO)
.setColor(Color.PINK) .setTitle("Rolling...")
.setTitle("Rolling...") .setDescription("*VROOOOOOOOOOOOOOOOM*")
.setDescription("*VROOOOOOOOOOOOOOOOM*") .setFooter(EmbedUI.BRAND)
.setFooter("Kiafumi - Maintained by oko.moe") .setTimestamp(ZonedDateTime.now());
.setTimestamp(ZonedDateTime.now()); e.getHook().sendMessageEmbeds(eb.build()).queue();
e.getHook().sendMessageEmbeds(eb.build()).queue(); Random rng = new Random();
Random rng = new Random(); User pickedUser = usersForRng.get(rng.nextInt(usersForRng.size()));
User pickedUser = usersForRng.get(rng.nextInt(usersForRng.size())); EmbedBuilder eb1 = new EmbedBuilder()
EmbedBuilder eb1 = new EmbedBuilder() .setColor(EmbedUI.INFO)
.setColor(Color.PINK) .setTitle("The dreidel has spoken...")
.setFooter("Kiafumi - Maintained by oko.moe") .setDescription(pickedUser.getName() + " is the lucky winner!")
.setTimestamp(ZonedDateTime.now()) .setThumbnail(pickedUser.getAvatarUrl())
.setTitle("The dreidel has spoken...") .setFooter(EmbedUI.BRAND) // TODO: Make this show the list of participants
.setThumbnail(pickedUser.getAvatarUrl()) .setTimestamp(ZonedDateTime.now());
.setDescription(pickedUser.getName() + " is the lucky winner!"); e.getHook().editOriginalEmbeds(eb1.build()).completeAfter(3, TimeUnit.SECONDS);
e.getHook().editOriginalEmbeds(eb1.build()).completeAfter(5, TimeUnit.SECONDS);
} }
} }

View File

@ -1,6 +1,7 @@
package moe.oko.Kiafumi.command; package moe.oko.Kiafumi.command;
import moe.oko.Kiafumi.util.CommandInfo; import moe.oko.Kiafumi.util.CommandInfo;
import moe.oko.Kiafumi.util.EmbedUI;
import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
@ -8,7 +9,6 @@ import net.dv8tion.jda.api.interactions.commands.OptionType;
import org.bitnick.net.duckduckgo.WebSearch; import org.bitnick.net.duckduckgo.WebSearch;
import org.bitnick.net.duckduckgo.entity.SearchResult; import org.bitnick.net.duckduckgo.entity.SearchResult;
import java.awt.Color;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -33,32 +33,30 @@ public class DuckCommand extends CommandClass{
@Override @Override
public void newCommand(String name, SlashCommandInteractionEvent e) { public void newCommand(String name, SlashCommandInteractionEvent e) {
switch (name) { if ("search".equals(name)) {
case "search": e.deferReply().queue();
e.deferReply().queue(); String option = e.getOption("query").getAsString();
String option = e.getOption("query").getAsString(); WebSearch ws = WebSearch.instanceOf();
WebSearch ws = WebSearch.instanceOf(); SearchResult sr;
SearchResult sr; try {
try { sr = ws.instantAnswerSearch(option);
sr = ws.instantAnswerSearch(option); } catch (Exception ex) {
} catch (Exception ex) {
EmbedBuilder eb = new EmbedBuilder()
.setColor(Color.RED)
.setTitle("Query Failed")
.setDescription("Couldn't find any results for " + option)
.setFooter("Kiafumi - Maintained by oko.moe")
.setTimestamp(ZonedDateTime.now());
e.getHook().sendMessageEmbeds(eb.build()).queue();
return;
}
EmbedBuilder eb = new EmbedBuilder() EmbedBuilder eb = new EmbedBuilder()
.setColor(Color.PINK) .setColor(EmbedUI.FAILURE)
.setTitle(sr.getTitle(), sr.getUrl().toString()) .setTitle("Query Failed")
.setDescription(sr.getDescription()) .setDescription("Couldn't find any results.")
.setFooter("Kiafumi - Maintained by oko.moe") .setFooter("Query: " + option)
.setTimestamp(ZonedDateTime.now()); .setTimestamp(ZonedDateTime.now());
e.getHook().sendMessageEmbeds(eb.build()).queue(); e.getHook().sendMessageEmbeds(eb.build()).queue();
return; //unnecessary, but there. return;
}
EmbedBuilder eb = new EmbedBuilder()
.setColor(EmbedUI.INFO)
.setTitle(sr.getTitle(), sr.getUrl().toString())
.setDescription(sr.getDescription())
.setFooter("Query: " + option)
.setTimestamp(ZonedDateTime.now());
e.getHook().sendMessageEmbeds(eb.build()).queue();
} }
} }

View File

@ -6,7 +6,7 @@ import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import java.awt.*; import moe.oko.Kiafumi.util.EmbedUI;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -30,17 +30,17 @@ public class InviteCommand extends CommandClass{
@Override @Override
public void newCommand(String name, SlashCommandInteractionEvent e) { public void newCommand(String name, SlashCommandInteractionEvent e) {
if(e.getGuild() == null) { return; } if(e.getGuild() == null) { return; }
switch (name) { if ("invite".equals(name)) {
case "invite": e.deferReply().queue();
e.deferReply().queue(); EmbedBuilder eb = new EmbedBuilder()
EmbedBuilder eb = new EmbedBuilder() .setColor(EmbedUI.INFO)
.setColor(Color.PINK) .setAuthor("Kiafumi", "https://oko.moe/kiafumi.htm", Kiafumi.JDA.getSelfUser().getAvatarUrl())
.setFooter("Kiafumi - Maintained by oko.moe") .setTitle("Invite me to your server!", Kiafumi.instance.config.assembleDefaultInvite())
.setTimestamp(ZonedDateTime.now()) .setDescription("Alternatively, you can host me yourself!")
.setTitle("Invite me to your server!", Kiafumi.instance.config.assembleDefaultInvite()) .appendDescription("https://fem.mint.lgbt/oko/kiafumi")
.setDescription("Have a nice day!!!") .setFooter(EmbedUI.BRAND)
.setAuthor("oko.moe", "https://oko.moe", Kiafumi.JDA.getSelfUser().getAvatarUrl()); .setTimestamp(ZonedDateTime.now());
e.getHook().sendMessageEmbeds(eb.build()).queue(); e.getHook().sendMessageEmbeds(eb.build()).queue();
} }
} }
@ -52,7 +52,7 @@ public class InviteCommand extends CommandClass{
@Override @Override
public List<CommandInfo> getSlashCommandInfo() { public List<CommandInfo> getSlashCommandInfo() {
List<CommandInfo> cil = new ArrayList<>(); List<CommandInfo> cil = new ArrayList<>();
CommandInfo ci = new CommandInfo("invite", "provides an invite for kiafumi."); CommandInfo ci = new CommandInfo("invite", "Returns an invite for Kiafumi.");
cil.add(ci); cil.add(ci);
return cil; return cil;
} }

View File

@ -2,13 +2,16 @@ package moe.oko.Kiafumi.command;
import moe.oko.Kiafumi.Kiafumi; import moe.oko.Kiafumi.Kiafumi;
import moe.oko.Kiafumi.util.CommandInfo; import moe.oko.Kiafumi.util.CommandInfo;
import moe.oko.Kiafumi.util.EmbedUI;
import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import java.awt.Color; import java.time.ZonedDateTime;
import java.util.*; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Random;
public class PingCommand extends CommandClass{ public class PingCommand extends CommandClass{
//Always true, ping cmd is EXISTENTIAL //Always true, ping cmd is EXISTENTIAL
@ -25,33 +28,34 @@ public class PingCommand extends CommandClass{
@Override @Override
public void legacyCommand(String[] args, MessageReceivedEvent e, boolean prefix) { public void legacyCommand(String[] args, MessageReceivedEvent e, boolean prefix) {
if(!prefix) { return; } if(!prefix) { return; }
switch(args[0].toLowerCase()) { if ("ping".equals(args[0].toLowerCase())) {
case "ping": long sentMs = e.getMessage().getTimeCreated().toInstant().toEpochMilli();
long sentMs = e.getMessage().getTimeCreated().toInstant().toEpochMilli(); long recMs = System.currentTimeMillis();
long recMs = System.currentTimeMillis(); long ping = recMs - sentMs;
long ping = sentMs - recMs; EmbedBuilder eb = new EmbedBuilder()
EmbedBuilder eb = new EmbedBuilder().setColor(new Color(0x6271c1)) .setColor(EmbedUI.INFO)
.setFooter("ping pong :)").setTitle(getComedy()).setDescription("Pinged " + ping + "ms"); .setTitle(getComedy())
e.getChannel().sendMessageEmbeds(eb.build()).queue(); .setDescription("Pong! " + ping + "ms")
return; .setFooter(EmbedUI.BRAND)
default: .setTimestamp(ZonedDateTime.now());
//how e.getChannel().sendMessageEmbeds(eb.build()).queue();
} }
} }
@Override @Override
public void newCommand(String name, SlashCommandInteractionEvent e) { public void newCommand(String name, SlashCommandInteractionEvent e) {
switch(name.toLowerCase(Locale.ROOT)) { if ("ping".equals(name.toLowerCase(Locale.ROOT))) {
case "ping": e.deferReply().queue();
e.deferReply().queue(); long sentMs = e.getTimeCreated().toInstant().toEpochMilli();
long sentMs = e.getTimeCreated().toInstant().toEpochMilli(); long recMs = System.currentTimeMillis();
long recMs = System.currentTimeMillis(); long ping = recMs - sentMs;
long ping = sentMs - recMs; EmbedBuilder eb = new EmbedBuilder()
EmbedBuilder eb = new EmbedBuilder().setColor(Color.PINK) .setColor(EmbedUI.INFO)
.setFooter("ping pong :)").setTitle(getComedy()).setDescription("Pinged " + ping + "ms"); .setTitle(getComedy())
e.getHook().sendMessageEmbeds(eb.build()).queue(); .setDescription("Pong! " + ping + "ms")
return; .setFooter(EmbedUI.BRAND)
default: .setTimestamp(ZonedDateTime.now());
e.getHook().sendMessageEmbeds(eb.build()).queue();
} }
} }
@ -68,7 +72,7 @@ public class PingCommand extends CommandClass{
@Override @Override
public List<CommandInfo> getSlashCommandInfo() { public List<CommandInfo> getSlashCommandInfo() {
List<CommandInfo> si = new ArrayList<>(); List<CommandInfo> si = new ArrayList<>();
CommandInfo ci = new CommandInfo("ping", "pings the server with a comedic message :)"); CommandInfo ci = new CommandInfo("ping", "Returns bot latency with a twist!");
si.add(ci); si.add(ci);
return si; return si;
} }

View File

@ -3,12 +3,12 @@ package moe.oko.Kiafumi.command;
import moe.oko.Kiafumi.Kiafumi; import moe.oko.Kiafumi.Kiafumi;
import moe.oko.Kiafumi.model.Server; import moe.oko.Kiafumi.model.Server;
import moe.oko.Kiafumi.util.CommandInfo; import moe.oko.Kiafumi.util.CommandInfo;
import moe.oko.Kiafumi.util.EmbedUI;
import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.interactions.commands.OptionType; import net.dv8tion.jda.api.interactions.commands.OptionType;
import java.awt.Color;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -38,22 +38,22 @@ public class SettingCommand extends CommandClass {
e.deferReply().queue(); e.deferReply().queue();
//No options, just fire an embed off... //No options, just fire an embed off...
EmbedBuilder eb = new EmbedBuilder() EmbedBuilder eb = new EmbedBuilder()
.setColor(Color.PINK) .setColor(EmbedUI.INFO)
.setTitle("Server Settings") .setTitle("Kiafumi Settings")
.setFooter("Kiafumi - Maintained by oko.moe") .setDescription(server.getOpts())
.setTimestamp(ZonedDateTime.now()) .setFooter(EmbedUI.BRAND)
.setDescription(server.getOpts()); .setTimestamp(ZonedDateTime.now());
e.getHook().sendMessageEmbeds(eb.build()).queue(); e.getHook().sendMessageEmbeds(eb.build()).queue();
return; return;
case "setting": case "setting":
e.deferReply().queue(); e.deferReply().queue();
String opt = e.getOption("setting_name").getAsString(); String opt = e.getOption("setting_name").getAsString();
EmbedBuilder eb1 = new EmbedBuilder() EmbedBuilder eb1 = new EmbedBuilder()
.setColor(Color.PINK) .setColor(EmbedUI.INFO)
.setTitle(opt + " Value") .setTitle(opt)
.setFooter("Kiafumi - Maintained by oko.moe") .setDescription("Value: `" + server.getOptionByString(opt) + '`')
.setTimestamp(ZonedDateTime.now()) .setFooter(EmbedUI.BRAND)
.setDescription(server.getOptionByString(opt)); .setTimestamp(ZonedDateTime.now());
e.getHook().sendMessageEmbeds(eb1.build()).queue(); e.getHook().sendMessageEmbeds(eb1.build()).queue();
return; return;
case "setting_set": case "setting_set":
@ -62,11 +62,11 @@ public class SettingCommand extends CommandClass {
String opt2 = e.getOption("setting_value").getAsString(); String opt2 = e.getOption("setting_value").getAsString();
String response = server.setOptionByString(opt1, opt2); String response = server.setOptionByString(opt1, opt2);
EmbedBuilder eb2 = new EmbedBuilder() EmbedBuilder eb2 = new EmbedBuilder()
.setColor(Color.PINK) .setColor(EmbedUI.SUCCESS)
.setTitle("Setting Modification - " + opt1) .setTitle(opt1)
.setFooter("Kiafumi - Maintained by oko.moe") .setDescription(response)
.setTimestamp(ZonedDateTime.now()) .setFooter(EmbedUI.BRAND)
.setDescription(response); .setTimestamp(ZonedDateTime.now());
e.getHook().sendMessageEmbeds(eb2.build()).queue(); e.getHook().sendMessageEmbeds(eb2.build()).queue();
return; return;
case "setting_clear": case "setting_clear":
@ -74,11 +74,11 @@ public class SettingCommand extends CommandClass {
String opt3 = e.getOption("setting_name").getAsString(); String opt3 = e.getOption("setting_name").getAsString();
String response1 = server.resetOptionByString(opt3); String response1 = server.resetOptionByString(opt3);
EmbedBuilder eb3 = new EmbedBuilder() EmbedBuilder eb3 = new EmbedBuilder()
.setColor(Color.PINK) .setColor(EmbedUI.SUCCESS)
.setTitle("Setting Reset - " + opt3) .setTitle(opt3)
.setFooter("Kiafumi - Maintained by oko.moe") .setDescription(response1)
.setTimestamp(ZonedDateTime.now()) .setFooter(EmbedUI.BRAND)
.setDescription(response1); .setTimestamp(ZonedDateTime.now());
e.getHook().sendMessageEmbeds(eb3.build()).queue(); e.getHook().sendMessageEmbeds(eb3.build()).queue();
return; return;
} }

View File

@ -2,6 +2,7 @@ package moe.oko.Kiafumi.listener;
import moe.oko.Kiafumi.Kiafumi; import moe.oko.Kiafumi.Kiafumi;
import moe.oko.Kiafumi.model.Server; import moe.oko.Kiafumi.model.Server;
import moe.oko.Kiafumi.util.EmbedUI;
import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.entities.Activity; import net.dv8tion.jda.api.entities.Activity;
import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.Guild;
@ -15,7 +16,6 @@ import net.dv8tion.jda.api.events.user.update.GenericUserPresenceEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter; import net.dv8tion.jda.api.hooks.ListenerAdapter;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.awt.Color;
import java.time.OffsetDateTime; import java.time.OffsetDateTime;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
@ -57,12 +57,12 @@ public class MainListener extends ListenerAdapter {
public void onMessageReceived(MessageReceivedEvent event) { public void onMessageReceived(MessageReceivedEvent event) {
if(event.getMessage().getMentionedUsers().contains(Kiafumi.JDA.getSelfUser())) { if(event.getMessage().getMentionedUsers().contains(Kiafumi.JDA.getSelfUser())) {
EmbedBuilder eb = new EmbedBuilder() EmbedBuilder eb = new EmbedBuilder()
.setColor(Color.PINK) .setColor(EmbedUI.INFO)
.setImage(Kiafumi.JDA.getSelfUser().getAvatarUrl())
.setTitle("Hi, i'm Kiafumi!") .setTitle("Hi, i'm Kiafumi!")
.setDescription("I was born on October 6th 2017! My goal is to explore the metaverse and help people in it!") .setDescription("I was summoned on October 6th 2017! My goal is to explore the metaverse and help people in it!")
.setImage(Kiafumi.JDA.getSelfUser().getAvatarUrl())
.setTimestamp(ZonedDateTime.now()) .setTimestamp(ZonedDateTime.now())
.setFooter("Kiafumi - Maintained by oko.moe"); .setFooter(EmbedUI.BRAND);
event.getChannel().sendMessageEmbeds(eb.build()).queue(); event.getChannel().sendMessageEmbeds(eb.build()).queue();
} }
} }
@ -107,20 +107,23 @@ public class MainListener extends ListenerAdapter {
try { try {
event.getGuild().addRoleToMember(event.getMember(), event.getGuild().getRoleById(server.getJoinRole())).queue(); event.getGuild().addRoleToMember(event.getMember(), event.getGuild().getRoleById(server.getJoinRole())).queue();
} catch(Exception ex) { } catch(Exception ex) {
event.getGuild().getTextChannels().get(0).sendMessage("**Failed to apply welcome role to " + event.getMember().getEffectiveName() + ", role did not exist.**").queue(); event.getGuild().getTextChannels().get(0).sendMessage("**Failed to apply welcome role to " + event.getMember().getEffectiveName() + ", as the role does not exist.**").queue();
} }
} }
if(server.isWelcomeEnabled()) { if(server.isWelcomeEnabled()) {
TextChannel textChannel = event.getGuild().getTextChannelById(server.getWelcomeChannel()); TextChannel textChannel = event.getGuild().getTextChannelById(server.getWelcomeChannel());
if(textChannel == null) { if(textChannel == null) {
event.getGuild().getTextChannels().get(0).sendMessage("**Failed to send welcome message, welcome channel doesn't exist.**").queue(); event.getGuild().getTextChannels().get(0).sendMessage("**Failed to send welcome message, as the welcome channel does not exist.**").queue();
return; return;
} }
//Ok, now we proceed. //Ok, now we proceed.
EmbedBuilder embedBuilder = new EmbedBuilder() EmbedBuilder embedBuilder = new EmbedBuilder()
.setColor(EmbedUI.SUCCESS)
.setAuthor(event.getMember().getEffectiveName() + "#" + event.getMember().getUser().getDiscriminator() + " (" .setAuthor(event.getMember().getEffectiveName() + "#" + event.getMember().getUser().getDiscriminator() + " ("
+ event.getMember().getId() + ")", null, event.getMember().getAvatarUrl()).setFooter("User Joined").setTimestamp(OffsetDateTime.now()) + event.getMember().getId() + ")", null, event.getMember().getEffectiveAvatarUrl())
.setDescription(event.getMember().getAsMention() + " | **Joined Discord**: " + event.getMember().getTimeCreated()).setColor(Color.GREEN); .setDescription(event.getMember().getAsMention() + " | **Joined Discord**: " + event.getMember().getTimeCreated())
.setFooter("User Joined")
.setTimestamp(OffsetDateTime.now());
textChannel.sendMessageEmbeds(embedBuilder.build()).queue(); textChannel.sendMessageEmbeds(embedBuilder.build()).queue();
} }
} }
@ -131,15 +134,18 @@ public class MainListener extends ListenerAdapter {
if(server.isWelcomeEnabled()) { if(server.isWelcomeEnabled()) {
TextChannel textChannel = event.getGuild().getTextChannelById(server.getWelcomeChannel()); TextChannel textChannel = event.getGuild().getTextChannelById(server.getWelcomeChannel());
if(textChannel == null) { if(textChannel == null) {
event.getGuild().getTextChannels().get(0).sendMessage("**Failed to send leave message, welcome channel doesn't exist.**").queue(); event.getGuild().getTextChannels().get(0).sendMessage("**Failed to send leave message, as the welcome channel does not exist.**").queue();
return; return;
} }
//Ok, now we proceed. //Ok, now we proceed.
DateTimeFormatter dTF = DateTimeFormatter.ofPattern("dd-MM-yyyy"); DateTimeFormatter dTF = DateTimeFormatter.ofPattern("dd-MM-yyyy");
EmbedBuilder embedBuilder = new EmbedBuilder() EmbedBuilder embedBuilder = new EmbedBuilder()
.setColor(EmbedUI.FAILURE)
.setAuthor(event.getMember().getEffectiveName() + "#" + event.getMember().getUser().getDiscriminator() + " (" .setAuthor(event.getMember().getEffectiveName() + "#" + event.getMember().getUser().getDiscriminator() + " ("
+ event.getMember().getId() + ")", null, event.getMember().getAvatarUrl()).setFooter("User Left").setTimestamp(OffsetDateTime.now()) + event.getMember().getId() + ")", null, event.getMember().getEffectiveAvatarUrl())
.setDescription(event.getMember().getAsMention() + " | **Joined Server**: " + event.getMember().getTimeJoined().format(dTF)).setColor(Color.RED); .setDescription(event.getMember().getAsMention() + " | **Joined Server**: " + event.getMember().getTimeJoined().format(dTF))
.setFooter("User Left")
.setTimestamp(OffsetDateTime.now());
textChannel.sendMessageEmbeds(embedBuilder.build()).queue(); textChannel.sendMessageEmbeds(embedBuilder.build()).queue();
} }
} }

View File

@ -0,0 +1,19 @@
package moe.oko.Kiafumi.util;
import java.awt.Color;
public abstract class EmbedUI {
/**
* Shorthand reference for common EmbedBuilder colors & strings.
* I (oko) chose these colors based on the Pantone Color of the year.
*/
// Strings
public static final String BRAND = "Kiafumi - oko.moe";
// Colors
public static final Color SUCCESS = new Color(136,176,75);
public static final Color FAILURE = new Color(255,111,97);
public static final Color INFO = new Color(123,196,196);
}