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);
    }

}
posted @ 2021-09-13 21:24  rongbu2  阅读(292)  评论(0)    收藏  举报