68 lines
2.2 KiB
Java
68 lines
2.2 KiB
Java
package handiebot.utils;
|
|
|
|
import handiebot.HandieBot;
|
|
import handiebot.view.BotLog;
|
|
import sx.blah.discord.handle.obj.IChannel;
|
|
import sx.blah.discord.handle.obj.IMessage;
|
|
import sx.blah.discord.handle.obj.Permissions;
|
|
import sx.blah.discord.util.RequestBuffer;
|
|
|
|
import static handiebot.HandieBot.log;
|
|
import static handiebot.HandieBot.resourceBundle;
|
|
|
|
/**
|
|
* @author Andrew Lalis
|
|
* Creates a message on a channel that will disappear after some time.
|
|
*/
|
|
public class DisappearingMessage extends Thread implements Runnable {
|
|
|
|
/**
|
|
* Creates a new disappearing message that times out after some time.
|
|
* @param channel The channel to write the message in.
|
|
* @param message The message content.
|
|
* @param timeout How long until the message is deleted.
|
|
*/
|
|
public DisappearingMessage(IChannel channel, String message, long timeout){
|
|
IMessage sentMessage = channel.sendMessage(message);
|
|
try {
|
|
sleep(timeout);
|
|
} catch (InterruptedException e) {
|
|
e.printStackTrace();
|
|
}
|
|
if (canDelete(sentMessage))
|
|
RequestBuffer.request(sentMessage::delete);
|
|
}
|
|
|
|
/**
|
|
* Deletes a message after a set amount of time.
|
|
* @param timeout The delay until deletion, in milliseconds.
|
|
* @param message The message to delete.
|
|
*/
|
|
public static void deleteMessageAfter(long timeout, IMessage message){
|
|
new Thread(() -> {
|
|
try {
|
|
sleep(timeout);
|
|
} catch (InterruptedException e){
|
|
e.printStackTrace();
|
|
}
|
|
if (canDelete(message))
|
|
RequestBuffer.request(message::delete);
|
|
}).start();
|
|
}
|
|
|
|
/**
|
|
* Check to see if it is possible to delete a message before doing so.
|
|
* @param message The message that may be deleted.
|
|
* @return True if it is safe to delete, false otherwise.
|
|
*/
|
|
private static boolean canDelete(IMessage message){
|
|
if (HandieBot.hasPermission(Permissions.MANAGE_MESSAGES, message.getChannel())){
|
|
return true;
|
|
} else {
|
|
log.log(BotLog.TYPE.ERROR, message.getGuild(), resourceBundle.getString("log.deleteMessageError"));
|
|
return false;
|
|
}
|
|
}
|
|
|
|
}
|