import java.util.*;
import java.util.zip.*;
import java.util.List;
import java.util.regex.*;
import java.util.concurrent.*;
import java.util.concurrent.atomic.*;
import java.util.concurrent.locks.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import javax.swing.table.*;
import java.io.*;
import java.net.*;
import java.lang.reflect.*;
import java.lang.ref.*;
import java.lang.management.*;
import java.security.*;
import java.security.spec.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.imageio.*;
import java.math.*;
import java.text.SimpleDateFormat;
import java.text.NumberFormat;
import javax.net.ssl.*;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import java.text.*;
import java.util.TimeZone;
import net.dv8tion.jda.core.events.guild.member.*;
import net.dv8tion.jda.core.Permission;
import net.dv8tion.jda.core.requests.restaction.MessageAction;
import net.dv8tion.jda.core.requests.RestAction;
import java.util.function.Consumer;
import javax.swing.border.*;
import java.awt.datatransfer.StringSelection;
import javax.swing.event.AncestorListener;
import javax.swing.event.AncestorEvent;
import javax.swing.Timer;
import javax.swing.undo.UndoManager;
import javax.imageio.metadata.*;
import javax.imageio.stream.*;
import java.awt.geom.*;
import net.dv8tion.jda.core.*;
import net.dv8tion.jda.core.entities.*;
import net.dv8tion.jda.core.entities.Member;
import net.dv8tion.jda.core.hooks.*;
import net.dv8tion.jda.core.events.message.*;
import net.dv8tion.jda.core.events.message.react.*;
import net.dv8tion.jda.api.events.Event;
import net.dv8tion.jda.api.events.user.update.*;
import net.dv8tion.jda.core.events.Event;
import net.dv8tion.jda.core.events.user.update.*;
class main {
abstract static class DynTalkBot2 extends DynServerAwareDiscordBot {
static boolean _switchableField_myName = true; String myName = "Anonymous bot";
transient boolean useAGIBlueForDropPunctuation = true;
transient boolean preprocessAtSelfToMyName = true;
transient boolean dropPunctuation = true;
transient boolean ngbCommands = true;
List authorizedUsers = ll(547706854680297473L); // stefan
static class ISaid implements IFieldsToList{
long channelID;
long date;
String text;
ISaid() {}
ISaid(long channelID, long date, String text) {
this.text = text;
this.date = date;
this.channelID = channelID;}
public String toString() { return shortClassName(this) + "(" + channelID + ", " + date + ", " + text + ")"; }
public boolean equals(Object o) {
if (!(o instanceof ISaid)) return false;
ISaid x = (ISaid) o;
return eq(channelID, x.channelID) && eq(date, x.date) && eq(text, x.text);
}
public int hashCode() {
int h = 69986258;
h = boostHashCombine(h, _hashCode(channelID));
h = boostHashCombine(h, _hashCode(date));
h = boostHashCombine(h, _hashCode(text));
return h;
}
public Object[] _fieldsToList() { return new Object[] {channelID, date, text}; }
}
void init() {
super.init();
onPostedInChannel.add((channel, msg) -> {
if (channel instanceof Channel) {
Guild guild = ((Channel) channel).getGuild();
if (guild == null) return;
ByServer bs = getByServer(guild);
long channelID = ((Channel) channel).getIdLong();
mapPut(bs.lastSaidInChannel, channelID, nu(ISaid.class, "channelID", channelID, "text" , msg));
change();
}
});
// We leave it as null to force subclasses to set this
// (avoids serializing bad instances)
// makeByServer = () -> (A) new ByServer;
dm_vmBus_onMessage_q("discordGuildJoin",new VF1