Comments (5)
Oops, probably my bad when I wrote #1126 even after review.
However, that is kinda weird because I am using this to perform some actions in my bots, maybe it has been updated ? Edit: No, I'm using ID only, so nevermind
I am going to write a PR for this as it seems to be kinda boring.
from discord4j.
I'm publishing a snapshot on my own nexus and writing the PR, the easiest solution is updating the ThreadChannel#getParent method signature, that would introduce a breaking change but as
3.3.0 is still pre-released I think it won't matter that much.
from discord4j.
Oops, probably my bad when I wrote #1126 even after review.
However, that is kinda weird because I am using this to perform some actions in my bots, maybe it has been updated ?Edit: No, I'm using ID only, so nevermindI am going to write a PR for this as it seems to be kinda boring.
yeah that was my workarround using the method byId for get the channel xd
from discord4j.
Here is a simple reproduction code with some minor logging to check it out :
import discord4j.core.DiscordClient;
import discord4j.core.event.domain.message.MessageCreateEvent;
import discord4j.core.object.entity.channel.ThreadChannel;
import reactor.core.publisher.Mono;
import java.util.Optional;
public class Main {
public static void main(String[] args) {
DiscordClient.create(Optional.ofNullable(System.getenv("DISCORD_TOKEN")).or(() -> Optional.ofNullable(args.length > 0 ? args[0] : null)).orElseThrow())
.withGateway(gatewayDiscordClient -> {
Mono<Void> forumThreadListener = gatewayDiscordClient.on(MessageCreateEvent.class, messageCreateEvent -> messageCreateEvent.getMessage().getChannel()
.doOnNext(messageChannel -> System.out.printf("Received message in channel ID %s of type %s\n", messageChannel.getId().asString(), messageChannel.getType().name()))
.ofType(ThreadChannel.class)
.doOnNext(threadChannel -> System.out.printf("Channel ID %s is a ThreadChannel, getting its parent\n", threadChannel.getId().asString()))
.flatMap(ThreadChannel::getParent)
.doOnNext(topLevelGuildMessageChannel -> System.out.printf("Parent channel ID is %s, its type is %s\n", topLevelGuildMessageChannel.getId().asString(), topLevelGuildMessageChannel.getType().name()))
.onErrorResume(throwable -> {
System.err.println("Cannot handle event");
throwable.printStackTrace();
return Mono.empty();
})).then();
return Mono.zipDelayError(
gatewayDiscordClient.onDisconnect(),
forumThreadListener
);
})
.block();
}
}
We can see pretty well the kind of issue (first message is in a text channel, second one in a thread :
eceived message in channel ID 1092456914719358999 of type GUILD_TEXT
Received message in channel ID 1172561366813528114 of type GUILD_PUBLIC_THREAD
Channel ID 1172561366813528114 is a ThreadChannel, getting its parent
Cannot handle event
java.lang.ClassCastException: Cannot cast discord4j.core.object.entity.channel.ForumChannel to discord4j.core.object.entity.channel.TopLevelGuildMessageChannel
at java.base/java.lang.Class.cast(Class.java:3889)
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:113)
at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onNext(FluxHide.java:137)
at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:74)
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:129)
at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2400)
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:171)
at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:2196)
at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onSubscribe(Operators.java:2070)
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onSubscribe(FluxMapFuseable.java:96)
at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55)
at reactor.core.publisher.Mono.subscribe(Mono.java:4490)
at reactor.core.publisher.FluxFlatMap.trySubscribeScalarMap(FluxFlatMap.java:203)
at reactor.core.publisher.MonoFlatMap.subscribeOrReturn(MonoFlatMap.java:53)
at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:57)
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:157)
at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:200)
at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122)
at reactor.core.publisher.FluxFilter$FilterSubscriber.onNext(FluxFilter.java:113)
at reactor.core.publisher.FluxPeekFuseable$PeekConditionalSubscriber.onNext(FluxPeekFuseable.java:854)
at reactor.core.publisher.FluxMap$MapConditionalSubscriber.onNext(FluxMap.java:224)
at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:74)
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:129)
at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2400)
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:171)
at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:2196)
at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onSubscribe(Operators.java:2070)
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onSubscribe(FluxMapFuseable.java:96)
at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55)
at reactor.core.publisher.FluxFromMonoOperator.subscribe(FluxFromMonoOperator.java:83)
at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:54)
at reactor.core.publisher.Flux.subscribe(Flux.java:8642)
at reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:427)
at reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onNext(FluxDoFinally.java:113)
at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:210)
at reactor.core.publisher.FluxHandleFuseable$HandleFuseableSubscriber.tryOnNext(FluxHandleFuseable.java:132)
at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.tryOnNext(FluxMapFuseable.java:317)
at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.tryOnNext(FluxFilterFuseable.java:367)
at reactor.core.publisher.FluxPublishOn$PublishOnConditionalSubscriber.runAsync(FluxPublishOn.java:992)
at reactor.core.publisher.FluxPublishOn$PublishOnConditionalSubscriber.run(FluxPublishOn.java:1067)
at reactor.scheduler.forkjoin.ForkJoinPoolScheduler$DisposableWorkerTask.run(ForkJoinPoolScheduler.java:443)
at reactor.scheduler.forkjoin.ForkJoinPoolScheduler$Worker.processTaskQueue(ForkJoinPoolScheduler.java:407)
at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1395)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)
from discord4j.
Closed by 6395a9b
from discord4j.
Related Issues (20)
- Jackson Error when entering DM channel option in slash command HOT 2
- Long response to buttons HOT 2
- Add support for `thread_id` and `thread_name` in webhook execution
- Bot freezes after about 100 button presses and many button presses are missed HOT 8
- Issue with Receiving Messages in Threads
- Add support for the `enforce_nonce` parameter on message creation HOT 1
- Add support for the `applied_tags` parameter on webhooks
- Use `emoji_id`, `emoji_name` and `emoji_animated` fields instead of `emoji` in onboarding prompt creation or update
- Add support for the Get and Edit Current Application endpoints
- Add missing fields in the `ApplicationInfo` object HOT 1
- Fix the `PositionModifyRequest` object and the "Modify Guild Channel Positions" request
- Rename the sticker pack route as it is no longer required to have a nitro subscription HOT 1
- Add support for the `GUILD_MEDIA` channel type
- Add some utilities to mention the guild navigation channels HOT 3
- Add missing audit log events HOT 1
- Replace the `Guild#getFeatures` return value to a `FeatureSet` instead of a `Set<String>` HOT 2
- Dependency com.discord4j:stores-api in /common module seems to be in the wrong scope.
- Support Java 21 in CI
- Forced Close Connection HOT 9
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from discord4j.