Discord机器人创建
Discord 机器人对接
环境搭建
详情可见:https://blog.csdn.net/weixin_43718648/article/details/109956026
代码参考
这里使用的是github上大神进行封装的SDK
详情可见: https://github.com/Javacord/Javacord
启动配置:
package com.example.demo.util;
import jodd.util.StringUtil;
import org.javacord.api.DiscordApi;
import org.javacord.api.DiscordApiBuilder;
import org.javacord.api.entity.channel.TextChannel;
import org.javacord.api.entity.message.MessageAuthor;
import org.javacord.api.entity.message.MessageBuilder;
import org.javacord.api.entity.message.embed.EmbedBuilder;
import org.javacord.api.event.connection.LostConnectionEvent;
import org.javacord.api.listener.connection.LostConnectionListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.CollectionUtils;
import java.util.Collection;
import java.util.Objects;
/**
* https://github.com/Javacord/Javacord 源码参考
*/
@Configuration
public class DiscordTest {
@Bean
public DiscordApi restart() {
// Insert your bot's token here
String token = "O";
DiscordApi api = newDiscordApiBuilder().setToken(token).login().join();
//开始活动
api.addMessageCreateListener(event -> {
if (event.getMessageContent().equalsIgnoreCase("/ooxx")) {
}
});
//服务器断联listener
api.addLostConnectionListener(new LostConnectionListener() {
@Override
public void onLostConnection(LostConnectionEvent event) {
// TODO Auto-generated method stub
}
});
// Print the invite url of your bot
System.out.println("You can invite the bot by using the following url: " + api.createBotInvite());
return api;
}
}
这里启动之后,控制台就会打印出一个连接,用浏览器打开,就能邀请机器人加入服务器。
使用:
package com.example.demo.sur.controller;
import com.example.demo.util.Constant;
import com.example.demo.util.R;
import jodd.util.StringUtil;
import org.javacord.api.DiscordApi;
import org.javacord.api.entity.channel.Channel;
import org.javacord.api.entity.channel.ServerChannel;
import org.javacord.api.entity.channel.TextChannel;
import org.javacord.api.entity.message.MessageBuilder;
import org.javacord.api.entity.server.Server;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/discord")
public class DiscordTestController {
@Resource
private DiscordApi discordApi;
@PostMapping("/sendMessage")
public R sendMessage(@RequestParam(required = false)String serverName,@RequestParam String channelName,@RequestParam String message) {
List<Channel> channels = new ArrayList<>();
if (StringUtil.isNotBlank(serverName)) {
for (Server server : discordApi.getServersByNameIgnoreCase(serverName)) {
channels.addAll(server.getChannelsByNameIgnoreCase(channelName));
}
}else {
//获取频道名称
channels.addAll(discordApi.getChannelsByNameIgnoreCase(channelName));
}
for (Channel channel : channels) {
new MessageBuilder()
.append(message)
.send((TextChannel) channel);
}
return R.ok();
}
@PostMapping("/getAllChannel")
public R getAllChannel(String serverName) {
List<Channel> channels = new ArrayList<>();
if (StringUtil.isNotBlank(serverName)) {
List<Server> servers = new ArrayList<>(discordApi.getServersByNameIgnoreCase(serverName));
for (Server server : servers) {
channels.addAll(server.getChannels());
}
} else {
channels.addAll(discordApi.getChannels());
}
//获取频道名称
List<Map<String, String>> dataList = new ArrayList<>();
Map<String, String> hashMap;
for (Channel channel : channels) {
if (channel.asServerChannel().isPresent()) {
ServerChannel serverChannel = channel.asServerChannel().get();
hashMap = new HashMap<>();
hashMap.put("id", String.valueOf(serverChannel.getId()));
hashMap.put("name", serverChannel.getName());
dataList.add(hashMap);
}
}
return R.ok(dataList);
}
}

浙公网安备 33010602011771号