Handle trivia edge cases without hanging
This commit is contained in:
parent
09c53c07a1
commit
26f1c880ea
@ -51,6 +51,7 @@ public class TriviaTask implements Runnable
|
|||||||
@Override
|
@Override
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
|
|
||||||
if(previousMessage != null)
|
if(previousMessage != null)
|
||||||
{
|
{
|
||||||
// todo: we shouldn't use this method, since it messes with the database... look at coin reflip
|
// todo: we shouldn't use this method, since it messes with the database... look at coin reflip
|
||||||
@ -75,8 +76,9 @@ public class TriviaTask implements Runnable
|
|||||||
int topScore = 0;
|
int topScore = 0;
|
||||||
StringBuilder othersBuilder = new StringBuilder();
|
StringBuilder othersBuilder = new StringBuilder();
|
||||||
|
|
||||||
LinkedList<TriviaScore> triviaScores = new LinkedList<>(TriviaUtil.channelAndScores.get(channel.getId()));
|
LinkedList<TriviaScore> triviaScores = TriviaUtil.channelAndScores.get(channel.getId());
|
||||||
triviaScores.sort(new TriviaScoreComparator());
|
if(triviaScores == null) triviaScores = new LinkedList<>();
|
||||||
|
else triviaScores.sort(new TriviaScoreComparator());
|
||||||
|
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
Integer previousScore = null;
|
Integer previousScore = null;
|
||||||
@ -119,17 +121,19 @@ public class TriviaTask implements Runnable
|
|||||||
String winnersTitle = "\uD83D\uDCAB ";
|
String winnersTitle = "\uD83D\uDCAB ";
|
||||||
winnersTitle += winners.size() == 1 ? "Winner" : "Winners";
|
winnersTitle += winners.size() == 1 ? "Winner" : "Winners";
|
||||||
|
|
||||||
|
String winnersString = winnersBuilder.toString();
|
||||||
|
String othersString = othersBuilder.toString();
|
||||||
|
|
||||||
EmbedBuilder scoreboardBuilder = new EmbedBuilder();
|
EmbedBuilder scoreboardBuilder = new EmbedBuilder();
|
||||||
scoreboardBuilder.setColor(Cache.getBotColor());
|
scoreboardBuilder.setColor(Cache.getBotColor());
|
||||||
scoreboardBuilder.setTitle("\uD83C\uDF1F Trivia Scoreboard");
|
scoreboardBuilder.setTitle("\uD83C\uDF1F Trivia Scoreboard");
|
||||||
scoreboardBuilder.addField(winnersTitle, winnersBuilder.toString(), false);
|
if(!winnersString.isEmpty()) scoreboardBuilder.addField(winnersTitle, winnersString, false);
|
||||||
scoreboardBuilder.addField("☁️ Others", othersBuilder.toString(), false);
|
else scoreboardBuilder.addField("\uD83D\uDE22 Sad Trivia",
|
||||||
|
"No one played \uD83D\uDE2D", false);
|
||||||
|
if(!othersString.isEmpty()) scoreboardBuilder.addField("☁️ Others", othersString, false);
|
||||||
|
|
||||||
channel.sendMessage(scoreboardText).addEmbeds(scoreboardBuilder.build()).queue();
|
channel.sendMessage(scoreboardText).addEmbeds(scoreboardBuilder.build()).queue();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// remove all cached data
|
// remove all cached data
|
||||||
TriviaUtil.channelsRunningTrivia.remove(channel.getId());
|
TriviaUtil.channelsRunningTrivia.remove(channel.getId());
|
||||||
TriviaUtil.channelAndWhoResponded.remove(channel.getId());
|
TriviaUtil.channelAndWhoResponded.remove(channel.getId());
|
||||||
@ -185,6 +189,7 @@ public class TriviaTask implements Runnable
|
|||||||
.setActionRow(answerButtons)
|
.setActionRow(answerButtons)
|
||||||
.complete();
|
.complete();
|
||||||
|
|
||||||
|
|
||||||
Cache.getDatabaseSource().trackRanCommandReply(previousMessage, author);
|
Cache.getDatabaseSource().trackRanCommandReply(previousMessage, author);
|
||||||
// todo: ^ we should get rid of this tracking, since we don't need to know who started the trivia.
|
// todo: ^ we should get rid of this tracking, since we don't need to know who started the trivia.
|
||||||
// todo: however, for now, that's the only way to avoid a thread-locking scenario as some data is
|
// todo: however, for now, that's the only way to avoid a thread-locking scenario as some data is
|
||||||
|
@ -22,6 +22,7 @@ import java.net.URL;
|
|||||||
import java.net.URLConnection;
|
import java.net.URLConnection;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.ScheduledFuture;
|
import java.util.concurrent.ScheduledFuture;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
@ -37,7 +38,7 @@ public class TriviaUtil
|
|||||||
public static HashMap<String, List<String>> channelAndWhoResponded = new HashMap<>();
|
public static HashMap<String, List<String>> channelAndWhoResponded = new HashMap<>();
|
||||||
|
|
||||||
// first string is the channelId, the list contain all score records for that channel
|
// first string is the channelId, the list contain all score records for that channel
|
||||||
public static HashMap<String, List<TriviaScore>> channelAndScores = new HashMap<>();
|
public static HashMap<String, LinkedList<TriviaScore>> channelAndScores = new HashMap<>();
|
||||||
|
|
||||||
public static String getTriviaLink(int categoryId) {return triviaLink + categoryId; }
|
public static String getTriviaLink(int categoryId) {return triviaLink + categoryId; }
|
||||||
public static String getCategoriesLink() {return categoriesLink; }
|
public static String getCategoriesLink() {return categoriesLink; }
|
||||||
@ -116,8 +117,8 @@ public class TriviaUtil
|
|||||||
|
|
||||||
if(trackResponse(user, event.getChannel()))
|
if(trackResponse(user, event.getChannel()))
|
||||||
{
|
{
|
||||||
List<TriviaScore> scores = channelAndScores.get(channelId);
|
LinkedList<TriviaScore> scores = channelAndScores.get(channelId);
|
||||||
if(scores == null) scores = new ArrayList<>();
|
if(scores == null) scores = new LinkedList<>();
|
||||||
TriviaScore currentUserScore = null;
|
TriviaScore currentUserScore = null;
|
||||||
for(TriviaScore score : scores)
|
for(TriviaScore score : scores)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user