Skip to content

Instantly share code, notes, and snippets.

@ahornyai
Created July 22, 2019 13:33
Show Gist options
  • Save ahornyai/d34528afe8635f4131ec9fd1a073be29 to your computer and use it in GitHub Desktop.
Save ahornyai/d34528afe8635f4131ec9fd1a073be29 to your computer and use it in GitHub Desktop.
/**
*
*/
package me.ahornyai.XP;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import me.ahornyai.Core.CoreClass;
import me.ahornyai.MySql.XpSql;
import net.dv8tion.jda.core.EmbedBuilder;
import net.dv8tion.jda.core.entities.Message;
import net.dv8tion.jda.core.entities.TextChannel;
import net.dv8tion.jda.core.entities.User;
import net.noxal.common.util.DateUtils;
/**
* @author Alex
*
*/
public class Handler {
private static ArrayList<RecentMessage> recentMessages = new ArrayList<>();
public static void increase(Message message) throws UnsupportedEncodingException {
long channelId = message.getChannel().getIdLong();
long userId = message.getAuthor().getIdLong();
long guildId = 473857024602537994L;
if (channelId == 595222919022641195L || channelId == 592280647381286912L) {
return;
}
long timestamp = message.getCreationTime().toInstant().toEpochMilli();
int messageLength = message.getContentDisplay().length();
recentMessages.add(new RecentMessage(guildId, channelId, userId, timestamp, messageLength));
int messageLengthAverage = getRecentMessageAverage();
long timeFromLast = getTimeFromLastMessage(guildId, userId, timestamp);
double baseAmount = 20.0;
double lengthMultiplier = (double) messageLength / (double) messageLengthAverage;
double timeMultiplier = ((double) timeFromLast / 1000.0) / 60.0;
double correctedTimeMultiplier = Math.min(1.0, timeMultiplier);
long xpGained = Math.round(baseAmount * lengthMultiplier * correctedTimeMultiplier);
if (xpGained == 0) {
return;
}
long before = XpSql.getUserXp(userId);
XpSql.addXp(xpGained, userId);
CachedUserXp c = CachedUserXp.getEntry(guildId, userId);
if (c != null) {
c.addXp(xpGained);
}
if (Levels.levelUp(before, xpGained, userId)) {
sendLevelUpmessage(message.getAuthor());
}
}
private static void sendLevelUpmessage(User user) throws UnsupportedEncodingException {
// TODO Auto-generated method stub
TextChannel c = CoreClass.jda.getTextChannelById(597137684527579156L);
String avatarurl;
if (user.getAvatarId() == null) {
avatarurl = "https://alexgames.tk/mineside/levelup/fallback128.png";
}else {
avatarurl = user.getAvatarUrl();
}
EmbedBuilder embed = new EmbedBuilder()
.setImage("https://alexgames.tk/mineside/levelup/"
+ "?name=" + URLEncoder.encode(user.getName(), "UTF-8")
+ "&level=" + Levels.getLevel(XpSql.getUserXp(user.getIdLong()))
+ "&profile="+ avatarurl);
c.sendMessage(embed.build()).queue();
}
public static void removeExpiredRecentMessages() {
for (int x = 0; x < recentMessages.size(); x += 1) {
RecentMessage message = recentMessages.get(x);
long expires = message.timestamp + (60 * 60 * 1000);
if (!DateUtils.timestampApplies(expires)) {
recentMessages.remove(x);
x -= 1;
}
}
}
public static int getRecentMessageAverage() {
removeExpiredRecentMessages();
int total = 0;
for (RecentMessage message : recentMessages) {
total += message.messageLength;
}
return Math.floorDiv(total, recentMessages.size());
}
public static long getTimeFromLastMessage(long guildId, long userId, long timestamp) {
long timeFromLast = (60 * 60 * 1000);
for (RecentMessage message : recentMessages) {
if (message.guildId != guildId || message.userId != userId) {
continue;
}
if (message.timestamp == timestamp) {
continue;
}
timeFromLast = timestamp - message.timestamp;
}
return timeFromLast;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment