Java源码示例:net.dv8tion.jda.api.events.GenericEvent
示例1
@Override
public void onEvent(@Nonnull GenericEvent event) {
if (event instanceof GuildJoinEvent) {
this.onGuildJoin((GuildJoinEvent) event);
} else if (event instanceof GuildLeaveEvent) {
this.onGuildLeave((GuildLeaveEvent) event);
} else if (event instanceof GuildVoiceLeaveEvent) {
this.onGuildVoiceLeave((GuildVoiceLeaveEvent) event);
} else if (event instanceof GuildVoiceJoinEvent) {
this.onGuildVoiceJoin((GuildVoiceJoinEvent) event);
} else if (event instanceof GuildVoiceMoveEvent) {
this.onGuildVoiceMove((GuildVoiceMoveEvent) event);
} else if (event instanceof GuildBanEvent) {
this.onGuildBan((GuildBanEvent) event);
} else if (event instanceof GuildUnbanEvent) {
this.onGuildUnban((GuildUnbanEvent) event);
}
}
示例2
@Override
public Guild getGuild(GenericEvent event) {
if (event == null) {
return null;
}
Class<? extends GenericEvent> clazz = event.getClass();
Method method;
if (!guildAccessors.containsKey(clazz)) {
method = ReflectionUtils.findMethod(clazz, "getGuild");
guildAccessors.put(clazz, method);
} else {
method = guildAccessors.get(clazz);
}
if (method != null) {
try {
Object result = ReflectionUtils.invokeMethod(method, event);
if (result instanceof Guild) {
return (Guild) result;
}
} catch (Exception e) {
// we don't care
}
}
return null;
}
示例3
private void loopListeners(GenericEvent event) {
if (event instanceof GuildMessageReceivedEvent) {
dispatchChain(GuildMessageReceivedEvent.class, (GuildMessageReceivedEvent) event);
}
for (EventListener listener : listeners) {
try {
listener.onEvent(event);
} catch (ObjectOptimisticLockingFailureException e) {
log.warn("[{}] optimistic lock happened for {}#{} while handling {}",
listener.getClass().getSimpleName(),
e.getPersistentClassName(),
e.getIdentifier(),
event);
} catch (Throwable throwable) {
log.error("[{}] had an uncaught exception for handling {}",
listener.getClass().getSimpleName(),
event,
throwable);
}
}
}
示例4
@Override
public void handle(@Nonnull GenericEvent event)
{
for (EventListener listener : listeners)
{
try
{
listener.onEvent(event);
}
catch (Throwable throwable)
{
JDAImpl.LOG.error("One of the EventListeners had an uncaught exception", throwable);
if (throwable instanceof Error)
throw (Error) throwable;
}
}
}
示例5
@Override
public void handle(@Nonnull GenericEvent event) {
final JDA.ShardInfo shardInfo = event.getJDA().getShardInfo();
if (shouldFakeBlock) {
//noinspection ConstantConditions
if (shardInfo == null) {
logger.warn(TextColor.RED + "Shard booting up (Event {})." + TextColor.RESET, event.getClass().getSimpleName());
return;
}
if (restartingShard == -1 || restartingShard == shardInfo.getShardId()) {
return;
}
}
for (final EventListener listener : this.listeners) {
try {
listener.onEvent(event);
}
catch (Throwable thr) {
Sentry.capture(thr);
logger.error("Error while handling event {}({}); {}",
event.getClass().getName(),
listener.getClass().getSimpleName(),
thr.getLocalizedMessage());
logger.error("", thr);
}
}
}
示例6
@Override
public void onEvent(@Nonnull GenericEvent event) {
if (event instanceof GuildMemberJoinEvent) {
this.onGuildMemberJoin((GuildMemberJoinEvent) event);
} else if (event instanceof GuildMemberRemoveEvent) {
this.onGuildMemberRemove((GuildMemberRemoveEvent) event);
} else if (event instanceof GuildMemberRoleRemoveEvent) {
this.onGuildMemberRoleRemove((GuildMemberRoleRemoveEvent) event);
} else if (event instanceof GuildMemberRoleAddEvent) {
this.onGuildMemberRoleAdd((GuildMemberRoleAddEvent) event);
}
}
示例7
@Override
public void onEvent(@Nonnull GenericEvent event) {
if (event instanceof ReadyEvent) {
this.onReady((ReadyEvent) event);
} else if (event instanceof GuildMessageUpdateEvent) {
this.onGuildMessageUpdate((GuildMessageUpdateEvent) event);
} else if (event instanceof GuildMessageReceivedEvent) {
this.onGuildMessageReceived((GuildMessageReceivedEvent) event);
}
}
示例8
private Object getAuthor(GenericEvent event) {
if (event == null) {
return null;
}
Class<? extends GenericEvent> clazz = event.getClass();
Method method;
if (!userAccessors.containsKey(clazz)) {
method = ReflectionUtils.findMethod(clazz, "getUser");
if (method == null) {
method = ReflectionUtils.findMethod(clazz, "getAuthor");
}
userAccessors.put(clazz, method);
} else {
method = userAccessors.get(clazz);
}
if (method != null) {
try {
Object result = ReflectionUtils.invokeMethod(method, event);
if (result instanceof User) {
return result;
}
} catch (Exception e) {
// we don't care
}
}
return null;
}
示例9
@Override
public void initContext(GenericEvent event) {
Guild guild = null;
User user = null;
if (event instanceof GenericGuildMemberEvent) {
GenericGuildMemberEvent memberEvent = (GenericGuildMemberEvent) event;
guild = memberEvent.getMember().getGuild();
user = memberEvent.getMember().getUser();
}
if (guild == null && event instanceof GenericGuildEvent) {
guild = ((GenericGuildEvent) event).getGuild();
}
if (guild == null || user == null) {
Member member = resolverService.getMember(event);
if (member != null) {
guild = member.getGuild();
user = member.getUser();
}
}
if (guild == null) {
guild = resolverService.getGuild(event);
}
if (user == null) {
user = resolverService.getUser(event);
}
if (guild != null) {
initContext(guild);
}
if (user != null) {
initContext(user);
}
}
示例10
@Override
public void handle(GenericEvent event) {
if (workerProperties.getEvents().isAsyncExecution()) {
try {
getTaskExecutor(event.getJDA()).execute(() -> handleEvent(event));
} catch (TaskRejectedException e) {
log.debug("Event rejected: {}", event);
}
} else {
handleEvent(event);
}
}
示例11
private void handleEvent(GenericEvent event) {
try {
contextService.initContext(event);
loopListeners(event);
} catch (Exception e) {
log.error("Event manager caused an uncaught exception", e);
} finally {
contextService.resetContext();
}
}
示例12
@Override
public void onEvent(@NotNull GenericEvent event) {
if (event instanceof GuildVoiceMoveEvent) {
onGuildVoiceMove((GuildVoiceMoveEvent) event);
} else if (event instanceof GuildVoiceJoinEvent) {
onGuildVoiceJoin((GuildVoiceJoinEvent) event);
} else if (event instanceof GuildVoiceLeaveEvent) {
onGuildVoiceLeave((GuildVoiceLeaveEvent) event);
} else if (event instanceof GuildVoiceMuteEvent) {
onGuildVoiceMute((GuildVoiceMuteEvent) event);
}
}
示例13
@Override
public void onEvent(@Nonnull GenericEvent event) {
if (event instanceof ReadyEvent) {
var sm = event.getJDA().getShardManager();
if (sm == null)
throw new AssertionError();
latch.countDown();
}
}
示例14
@Override
public void onEvent(@Nonnull GenericEvent e) {
if (!(e instanceof GuildMessageReceivedEvent))
return;
GuildMessageReceivedEvent event = (GuildMessageReceivedEvent) e;
//Don't listen to ourselves...
if (event.getAuthor().equals(event.getJDA().getSelfUser()))
return;
long channelId = event.getChannel().getIdLong();
List<RunningOperation> l = OPS.get(channelId);
if (l == null || l.isEmpty())
return;
l.removeIf(o -> {
try {
int i = o.operation.run(event);
if (i == Operation.COMPLETED) {
o.future.complete(null);
return true;
}
if (i == Operation.RESET_TIMEOUT) {
o.resetTimeout();
}
return false;
} catch (Exception ex) {
ex.printStackTrace();
return false;
}
});
}
示例15
@Override
public void onEvent(@NotNull GenericEvent event) {
if (event instanceof GuildMessageReceivedEvent) {
GuildMessageReceivedEvent msg = (GuildMessageReceivedEvent) event;
//Inserts a cached message into the cache. This only holds the id and the content, and is way lighter than saving the entire jda object.
messageCache.put(msg.getMessage().getIdLong(), Optional.of(new CachedMessage(msg.getAuthor().getIdLong(), msg.getMessage().getContentDisplay())));
//Ignore myself and bots.
if (msg.getAuthor().isBot() || msg.isWebhookMessage() || msg.getAuthor().equals(msg.getJDA().getSelfUser()))
return;
threadPool.execute(() -> onCommand(msg));
}
}
示例16
@Override
@SuppressWarnings("unchecked")
public void handle(@Nonnull GenericEvent event)
{
Class<?> eventClass = event.getClass();
do
{
Map<Object, List<Method>> listeners = methods.get(eventClass);
if (listeners != null)
{
listeners.forEach((key, value) -> value.forEach(method ->
{
try
{
method.setAccessible(true);
method.invoke(key, event);
}
catch (IllegalAccessException | InvocationTargetException e1)
{
JDAImpl.LOG.error("Couldn't access annotated EventListener method", e1);
}
catch (Throwable throwable)
{
JDAImpl.LOG.error("One of the EventListeners had an uncaught exception", throwable);
if (throwable instanceof Error)
throw (Error) throwable;
}
}));
}
eventClass = eventClass == Event.class ? null : (Class<? extends GenericEvent>) eventClass.getSuperclass();
}
while (eventClass != null);
}
示例17
private void updateMethods()
{
methods.clear();
for (Object listener : listeners)
{
boolean isClass = listener instanceof Class;
Class<?> c = isClass ? (Class) listener : listener.getClass();
Method[] allMethods = c.getDeclaredMethods();
for (Method m : allMethods)
{
if (!m.isAnnotationPresent(SubscribeEvent.class) || (isClass && !Modifier.isStatic(m.getModifiers())))
{
continue;
}
Class<?>[] pType = m.getParameterTypes();
if (pType.length == 1 && GenericEvent.class.isAssignableFrom(pType[0]))
{
Class<?> eventClass = pType[0];
if (!methods.containsKey(eventClass))
{
methods.put(eventClass, new ConcurrentHashMap<>());
}
if (!methods.get(eventClass).containsKey(listener))
{
methods.get(eventClass).put(listener, new CopyOnWriteArrayList<>());
}
methods.get(eventClass).get(listener).add(m);
}
}
}
}
示例18
@Override
public void handle(@Nonnull GenericEvent event)
{
try
{
if (executor != null && !executor.isShutdown())
executor.execute(() -> handleInternally(event));
else
handleInternally(event);
}
catch (Exception ex)
{
JDAImpl.LOG.error("Encountered exception trying to schedule event", ex);
}
}
示例19
private void handleInternally(@Nonnull GenericEvent event)
{
// don't allow mere exceptions to obstruct the socket handler
try
{
subject.handle(event);
}
catch (RuntimeException e)
{
JDAImpl.LOG.error("The EventManager.handle() call had an uncaught exception", e);
}
}
示例20
@Override
public void onEvent(GenericEvent event)
{
Message msg;
if (event instanceof GuildMessageReceivedEvent)
{
msg = ((GuildMessageReceivedEvent) event).getMessage();
}
else if (event instanceof GuildMessageUpdateEvent)
{
msg = ((GuildMessageUpdateEvent) event).getMessage();
}
else
{
return;
}
//Basically: If we are the ones that sent the message, don't send it to IRC.
if (event.getJDA().getSelfUser().equals(msg.getAuthor()))
return;
//If this returns null, then this EndPoint isn't part of a bridge.
EndPoint endPoint = BridgeManager.getInstance().getOtherEndPoint(EndPointInfo.createFromDiscordChannel(msg.getTextChannel()));
if (endPoint != null)
{
EndPointMessage message = EndPointMessage.createFromDiscordEvent(msg);
endPoint.sendMessage(message);
}
}
示例21
@Override
public void onEvent(@Nonnull GenericEvent event) {
if (event instanceof GatewayPingEvent) {
this.onGatewayPing((GatewayPingEvent) event);
}
}
示例22
@Override
public User getUser(GenericEvent event) {
Object author = getAuthor(event);
return author instanceof User ? (User) author : null;
}
示例23
@Override
public Member getMember(GenericEvent event) {
Object author = getAuthor(event);
return author instanceof Member ? (Member) author : null;
}
示例24
@Override
public void handle(@NotNull GenericEvent event) {
lastJdaEvent = System.currentTimeMillis();
super.handle(event);
}
示例25
public void handleEvent(@Nonnull GenericEvent event)
{
eventManager.handle(event);
}
示例26
/**
* Handles the provided {@link net.dv8tion.jda.api.events.GenericEvent GenericEvent}.
* <br>How this is handled is specified by the implementation.
*
* <p>An implementation should not throw exceptions.
*
* @param event
* The event to handle
*/
void handle(@Nonnull GenericEvent event);
示例27
/**
* Handles any {@link net.dv8tion.jda.api.events.GenericEvent GenericEvent}.
*
* <p>To get specific events with Methods like {@code onMessageReceived(MessageReceivedEvent event)}
* take a look at: {@link net.dv8tion.jda.api.hooks.ListenerAdapter ListenerAdapter}
*
* @param event
* The Event to handle.
*/
void onEvent(@Nonnull GenericEvent event);
示例28
Guild getGuild(GenericEvent event);
示例29
User getUser(GenericEvent event);
示例30
Member getMember(GenericEvent event);