如何在Spigot插件中使用discord4j。

huangapple go评论106阅读模式
英文:

How to use discord4j in a spigot plugin

问题

这是我翻译好的代码部分:

  1. package nz.laspruca.tcplugin.util;
  2. import discord4j.core.DiscordClient;
  3. import discord4j.core.GatewayDiscordClient;
  4. import discord4j.core.object.entity.Member;
  5. import java.util.List;
  6. import java.util.Objects;
  7. import java.util.stream.Collectors;
  8. import static org.qrl.tcplugin.TCPlugin.*;
  9. public class Discord {
  10. public GatewayDiscordClient gateway;
  11. private boolean goBrr = true;
  12. public Discord(String token) {
  13. DiscordClient client = DiscordClient.builder(token).build();
  14. gateway = client.login().block();
  15. if (gateway == null) {
  16. logger.warning("Unable to connect to discord, oh well");
  17. goBrr = false;
  18. }
  19. }
  20. public void exitDiscord() {
  21. if (goBrr) {
  22. gateway.logout();
  23. }
  24. }
  25. public boolean logedIn() {
  26. return this.goBrr;
  27. }
  28. public List<String> getMembers() throws IllegalStateException {
  29. if (goBrr)
  30. return Objects.requireNonNull(Objects.requireNonNull(gateway
  31. .getGuilds()
  32. .collect(Collectors.toList())
  33. .block())
  34. .get(0)
  35. .getMembers()
  36. .collect(Collectors.toList())
  37. .block())
  38. .stream()
  39. .map(Member::getDisplayName)
  40. .collect(Collectors.toList());
  41. else
  42. throw new IllegalStateException("No valid connection to discord");
  43. }
  44. }

请注意,代码中的部分符号(如&quot;)在翻译后已被正确处理。如果需要进一步帮助,请随时提问。

英文:

I am making a plugin for a friends minecraft server, they also have a discord server for this server. I am trying to add some integrations between the discord server and the plugin using discord4j. The plugin compiles fine, when I try to load the plugin, I get one of two exceptions:

  1. The first time I load the plugin
  1. java.lang.NoSuchMethodError: &#39;boolean io.netty.handler.ssl.SslProvider.isAlpnSupported(io.netty.handler.ssl.SslProvider)&#39;
  2. at reactor.netty.http.client.HttpClientSecure.&lt;clinit&gt;(HttpClientSecure.java:79) ~[?:?]
  3. at reactor.netty.http.client.HttpClient.secure(HttpClient.java:1073) ~[?:?]
  4. at discord4j.common.ReactorResources.lambda$static$0(ReactorResources.java:41) ~[?:?]
  5. at discord4j.common.ReactorResources.&lt;init&gt;(ReactorResources.java:54) ~[?:?]
  6. at discord4j.rest.RestClientBuilder.initReactorResources(RestClientBuilder.java:245) ~[?:?]
  7. at discord4j.rest.RestClientBuilder.build(RestClientBuilder.java:226) ~[?:?]
  8. at discord4j.core.DiscordClientBuilder.build(DiscordClientBuilder.java:85) ~[?:?]
  9. at discord4j.core.DiscordClientBuilder.build(DiscordClientBuilder.java:73) ~[?:?]
  10. at nz.laspruca.tcplugin.util.Discord.&lt;init&gt;(Discord.java:18) ~[?:?]
  11. at nz.laspruca.tcplugin.Plugin.onEnable(Plugin.java:14) ~[?:?]
  12. at org.qrl.tcplugin.TCPlugin.onEnable(TCPlugin.java:18) ~[?:?]
  13. at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:263) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  14. at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:351) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  15. at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:480) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  16. at org.bukkit.craftbukkit.v1_16_R2.CraftServer.enablePlugin(CraftServer.java:494) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  17. at org.bukkit.craftbukkit.v1_16_R2.CraftServer.enablePlugins(CraftServer.java:408) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  18. at net.minecraft.server.v1_16_R2.MinecraftServer.loadWorld(MinecraftServer.java:435) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  19. at net.minecraft.server.v1_16_R2.DedicatedServer.init(DedicatedServer.java:216) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  20. at net.minecraft.server.v1_16_R2.MinecraftServer.w(MinecraftServer.java:808) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  21. at net.minecraft.server.v1_16_R2.MinecraftServer.lambda$0(MinecraftServer.java:164) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  22. at java.lang.Thread.run(Thread.java:834) [?:?]
  1. When I reload the plugin
  1. java.lang.ExceptionInInitializerError: null
  2. at reactor.netty.http.client.HttpClient.followRedirect(HttpClient.java:870) ~[?:?]
  3. at reactor.netty.http.client.HttpClient.followRedirect(HttpClient.java:806) ~[?:?]
  4. at discord4j.common.ReactorResources.lambda$static$0(ReactorResources.java:41) ~[?:?]
  5. at discord4j.common.ReactorResources.&lt;init&gt;(ReactorResources.java:54) ~[?:?]
  6. at discord4j.rest.RestClientBuilder.initReactorResources(RestClientBuilder.java:245) ~[?:?]
  7. at discord4j.rest.RestClientBuilder.build(RestClientBuilder.java:226) ~[?:?]
  8. at discord4j.core.DiscordClientBuilder.build(DiscordClientBuilder.java:85) ~[?:?]
  9. at discord4j.core.DiscordClientBuilder.build(DiscordClientBuilder.java:73) ~[?:?]
  10. at nz.laspruca.tcplugin.util.Discord.&lt;init&gt;(Discord.java:18) ~[?:?]
  11. at nz.laspruca.tcplugin.Plugin.onEnable(Plugin.java:14) ~[?:?]
  12. at org.qrl.tcplugin.TCPlugin.onEnable(TCPlugin.java:18) ~[?:?]
  13. at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:263) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  14. at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:351) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  15. at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:480) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  16. at org.bukkit.craftbukkit.v1_16_R2.CraftServer.enablePlugin(CraftServer.java:494) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  17. at org.bukkit.craftbukkit.v1_16_R2.CraftServer.enablePlugins(CraftServer.java:408) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  18. at org.bukkit.craftbukkit.v1_16_R2.CraftServer.reload(CraftServer.java:876) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  19. at org.bukkit.Bukkit.reload(Bukkit.java:642) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  20. at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:27) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  21. at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:149) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  22. at org.bukkit.craftbukkit.v1_16_R2.CraftServer.dispatchCommand(CraftServer.java:758) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  23. at org.bukkit.craftbukkit.v1_16_R2.CraftServer.dispatchServerCommand(CraftServer.java:743) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  24. at net.minecraft.server.v1_16_R2.DedicatedServer.handleCommandQueue(DedicatedServer.java:381) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  25. at net.minecraft.server.v1_16_R2.DedicatedServer.b(DedicatedServer.java:350) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  26. at net.minecraft.server.v1_16_R2.MinecraftServer.a(MinecraftServer.java:1007) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  27. at net.minecraft.server.v1_16_R2.MinecraftServer.w(MinecraftServer.java:846) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  28. at net.minecraft.server.v1_16_R2.MinecraftServer.lambda$0(MinecraftServer.java:164) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  29. at java.lang.Thread.run(Thread.java:834) [?:?]
  30. Caused by: java.lang.IllegalArgumentException: &#39;httpClientConf&#39; is already in use
  31. at io.netty.util.ConstantPool.createOrThrow(ConstantPool.java:113) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  32. at io.netty.util.ConstantPool.newInstance(ConstantPool.java:95) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  33. at io.netty.util.AttributeKey.newInstance(AttributeKey.java:55) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-55a78ff]
  34. at reactor.netty.http.client.HttpClientConfiguration.&lt;clinit&gt;(HttpClientConfiguration.java:51) ~[?:?]
  35. ... 28 more

Here is my pom.xml:

  1. &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
  2. &lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot;
  3. xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
  4. xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&quot;&gt;
  5. &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
  6. &lt;groupId&gt;org.qrl&lt;/groupId&gt;
  7. &lt;artifactId&gt;tcplugin&lt;/artifactId&gt;
  8. &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
  9. &lt;packaging&gt;jar&lt;/packaging&gt;
  10. &lt;name&gt;TCPlugin&lt;/name&gt;
  11. &lt;description&gt;The offical TCPlugin&lt;/description&gt;
  12. &lt;properties&gt;
  13. &lt;java.version&gt;1.8&lt;/java.version&gt;
  14. &lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt;
  15. &lt;/properties&gt;
  16. &lt;url&gt;qrl.nz&lt;/url&gt;
  17. &lt;build&gt;
  18. &lt;plugins&gt;
  19. &lt;plugin&gt;
  20. &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
  21. &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;
  22. &lt;version&gt;3.8.1&lt;/version&gt;
  23. &lt;configuration&gt;
  24. &lt;source&gt;${java.version}&lt;/source&gt;
  25. &lt;target&gt;${java.version}&lt;/target&gt;
  26. &lt;/configuration&gt;
  27. &lt;/plugin&gt;
  28. &lt;plugin&gt;
  29. &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
  30. &lt;artifactId&gt;maven-shade-plugin&lt;/artifactId&gt;
  31. &lt;version&gt;3.2.4&lt;/version&gt;
  32. &lt;configuration&gt;
  33. &lt;filters&gt;
  34. &lt;filter&gt;
  35. &lt;artifact&gt;*:*&lt;/artifact&gt;
  36. &lt;excludes&gt;
  37. &lt;exclude&gt;module-info.class&lt;/exclude&gt;
  38. &lt;exclude&gt;META-INF/*.SF&lt;/exclude&gt;
  39. &lt;exclude&gt;META-INF/*.DSA&lt;/exclude&gt;
  40. &lt;exclude&gt;META-INF/*.RSA&lt;/exclude&gt;
  41. &lt;/excludes&gt;
  42. &lt;/filter&gt;
  43. &lt;/filters&gt;
  44. &lt;/configuration&gt;
  45. &lt;executions&gt;
  46. &lt;execution&gt;
  47. &lt;phase&gt;package&lt;/phase&gt;
  48. &lt;goals&gt;
  49. &lt;goal&gt;shade&lt;/goal&gt;
  50. &lt;/goals&gt;
  51. &lt;/execution&gt;
  52. &lt;/executions&gt;
  53. &lt;/plugin&gt;
  54. &lt;/plugins&gt;
  55. &lt;resources&gt;
  56. &lt;resource&gt;
  57. &lt;directory&gt;src/main/resources&lt;/directory&gt;
  58. &lt;filtering&gt;true&lt;/filtering&gt;
  59. &lt;/resource&gt;
  60. &lt;/resources&gt;
  61. &lt;/build&gt;
  62. &lt;repositories&gt;
  63. &lt;repository&gt;
  64. &lt;id&gt;jitpack&lt;/id&gt;
  65. &lt;url&gt;https://jitpack.io&lt;/url&gt;
  66. &lt;/repository&gt;
  67. &lt;repository&gt;
  68. &lt;snapshots&gt;
  69. &lt;enabled&gt;false&lt;/enabled&gt;
  70. &lt;/snapshots&gt;
  71. &lt;id&gt;central&lt;/id&gt;
  72. &lt;name&gt;bintray&lt;/name&gt;
  73. &lt;url&gt;https://jcenter.bintray.com&lt;/url&gt;
  74. &lt;/repository&gt;
  75. &lt;repository&gt;
  76. &lt;id&gt;spigotmc-repo&lt;/id&gt;
  77. &lt;url&gt;https://hub.spigotmc.org/nexus/content/repositories/snapshots/&lt;/url&gt;
  78. &lt;/repository&gt;
  79. &lt;repository&gt;
  80. &lt;id&gt;sonatype&lt;/id&gt;
  81. &lt;url&gt;https://oss.sonatype.org/content/groups/public/&lt;/url&gt;
  82. &lt;/repository&gt;
  83. &lt;/repositories&gt;
  84. &lt;dependencies&gt;
  85. &lt;dependency&gt;
  86. &lt;groupId&gt;org.spigotmc&lt;/groupId&gt;
  87. &lt;artifactId&gt;spigot-api&lt;/artifactId&gt;
  88. &lt;version&gt;1.16.3-R0.1-SNAPSHOT&lt;/version&gt;
  89. &lt;scope&gt;provided&lt;/scope&gt;
  90. &lt;/dependency&gt;
  91. &lt;dependency&gt;
  92. &lt;groupId&gt;com.discord4j&lt;/groupId&gt;
  93. &lt;artifactId&gt;discord4j-core&lt;/artifactId&gt;
  94. &lt;version&gt;3.1.1&lt;/version&gt;
  95. &lt;/dependency&gt;
  96. &lt;dependency&gt;
  97. &lt;groupId&gt;com.github.DevLeoko&lt;/groupId&gt;
  98. &lt;artifactId&gt;AdvancedBan&lt;/artifactId&gt;
  99. &lt;version&gt;2.2.1&lt;/version&gt;
  100. &lt;/dependency&gt;
  101. &lt;/dependencies&gt;
  102. &lt;/project&gt;

And the class responsable for the discord interactions

  1. package nz.laspruca.tcplugin.util;
  2. import discord4j.core.DiscordClient;
  3. import discord4j.core.GatewayDiscordClient;
  4. import discord4j.core.object.entity.Member;
  5. import java.util.List;
  6. import java.util.Objects;
  7. import java.util.stream.Collectors;
  8. import static org.qrl.tcplugin.TCPlugin.*;
  9. public class Discord {
  10. public GatewayDiscordClient gateway;
  11. private boolean goBrr = true;
  12. public Discord(String token) {
  13. DiscordClient client = DiscordClient.builder(token).build();
  14. gateway = client.login().block();
  15. if (gateway == null) {
  16. logger.warning(&quot;Unable to connect to discord, oh well&quot;);
  17. goBrr = false;
  18. }
  19. }
  20. public void exitDiscord() {
  21. if (goBrr) {
  22. gateway.logout();
  23. }
  24. }
  25. public boolean logedIn() {
  26. return this.goBrr;
  27. }
  28. public List&lt;String&gt; getMembers() throws IllegalStateException {
  29. if (goBrr)
  30. return Objects.requireNonNull(Objects.requireNonNull(gateway
  31. .getGuilds()
  32. .collect(Collectors.toList())
  33. .block())
  34. .get(0)
  35. .getMembers()
  36. .collect(Collectors.toList())
  37. .block())
  38. .stream()
  39. .map(Member::getDisplayName)
  40. .collect(Collectors.toList());
  41. else
  42. throw new IllegalStateException(&quot;No valid connection to discord&quot;);
  43. }
  44. }

答案1

得分: 2

以下是翻译好的内容:

你现在可能已经解决了这个问题,但对其他人可能会有帮助。

我花了一些时间,但这对我有效。似乎 spigot 使用了 netty 的某种版本冲突。 (猜测)

注意 <relocations> 标签。

  1. <plugin>
  2. <groupId>org.apache.maven.plugins</groupId>
  3. <artifactId>maven-shade-plugin</artifactId>
  4. <version>3.2.4</version>
  5. <executions>
  6. <execution>
  7. <phase>package</phase>
  8. <goals>
  9. <goal>shade</goal>
  10. </goals>
  11. <configuration>
  12. <transformers>
  13. <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
  14. <mainClass>你的主类</mainClass>
  15. </transformer>
  16. </transformers>
  17. <filters>
  18. <filter>
  19. <artifact>*:*</artifact>
  20. <excludes>
  21. <exclude>META-INF/maven/**</exclude>
  22. <exclude>META-INF/*.SF</exclude>
  23. <exclude>META-INF/*.DSA</exclude>
  24. <exclude>META-INF/*.RSA</exclude>
  25. </excludes>
  26. </filter>
  27. </filters>
  28. <relocations>
  29. <relocation>
  30. <pattern>io</pattern>
  31. <shadedPattern>io.netty</shadedPattern>
  32. <includes>
  33. <include>io.netty.*</include>
  34. </includes>
  35. </relocation>
  36. </relocations>
  37. </configuration>
  38. </execution>
  39. </executions>
  40. </plugin>
英文:

You might have solved the issue by now, but it might come in handy for others.

It took me a while, but this works for me. It seems that there seems to be some kind of version conflict with netty that spigot uses. (a guess)

Mind the &lt;relocations&gt; tag.

  1. &lt;plugin&gt;
  2. &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
  3. &lt;artifactId&gt;maven-shade-plugin&lt;/artifactId&gt;
  4. &lt;version&gt;3.2.4&lt;/version&gt;
  5. &lt;executions&gt;
  6. &lt;execution&gt;
  7. &lt;phase&gt;package&lt;/phase&gt;
  8. &lt;goals&gt;
  9. &lt;goal&gt;shade&lt;/goal&gt;
  10. &lt;/goals&gt;
  11. &lt;configuration&gt;
  12. &lt;transformers&gt;
  13. &lt;transformer implementation=&quot;org.apache.maven.plugins.shade.resource.ManifestResourceTransformer&quot;&gt;
  14. &lt;mainClass&gt;your.main.class&lt;/mainClass&gt;
  15. &lt;/transformer&gt;
  16. &lt;/transformers&gt;
  17. &lt;filters&gt;
  18. &lt;filter&gt;
  19. &lt;artifact&gt;*:*&lt;/artifact&gt;
  20. &lt;excludes&gt;
  21. &lt;exclude&gt;META-INF/maven/**&lt;/exclude&gt;
  22. &lt;exclude&gt;META-INF/*.SF&lt;/exclude&gt;
  23. &lt;exclude&gt;META-INF/*.DSA&lt;/exclude&gt;
  24. &lt;exclude&gt;META-INF/*.RSA&lt;/exclude&gt;
  25. &lt;/excludes&gt;
  26. &lt;/filter&gt;
  27. &lt;/filters&gt;
  28. &lt;relocations&gt;
  29. &lt;relocation&gt;
  30. &lt;pattern&gt;io&lt;/pattern&gt;
  31. &lt;shadedPattern&gt;io.netty&lt;/shadedPattern&gt;
  32. &lt;includes&gt;
  33. &lt;include&gt;io.netty.*&lt;/include&gt;
  34. &lt;/includes&gt;
  35. &lt;/relocation&gt;
  36. &lt;/relocations&gt;
  37. &lt;/configuration&gt;
  38. &lt;/execution&gt;
  39. &lt;/executions&gt;
  40. &lt;/plugin&gt;

huangapple
  • 本文由 发表于 2020年10月26日 03:55:31
  • 转载请务必保留本文链接:https://go.coder-hub.com/64528129.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定