Skip to content

DeeChael/Dodo.java

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dodo.java

渡渡语音的Java SDK

本项目参考了 @TWT233 制作的 KOOK python sdk khl.py 进行开发

2022.8.24 更新:现在基本做完了,已经可以使用了 2023.10.17 虽然我之前考虑过继续进行该 SDK 的开发,但是由于时间问题苦苦没有开始,但是已经有大佬fork了此项目继续进行开发:https://github.com/Ghost-chu/Dodo.java 大家也可以支持一下这位大佬

快速上手

配置文件:

client-id: 00000000
token: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

机器人启动类:

package net.deechael.dodo.test;

import com.mojang.brigadier.arguments.StringArgumentType;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.builder.RequiredArgumentBuilder;
import net.deechael.dodo.api.*;
import net.deechael.dodo.command.BrigadierCommandExecutor;
import net.deechael.dodo.command.DodoCommand;
import net.deechael.dodo.command.SimpleCommandExecutor;
import net.deechael.dodo.configuration.Configuration;
import net.deechael.dodo.configuration.file.YamlConfiguration;
import net.deechael.dodo.content.Message;
import net.deechael.dodo.content.TextMessage;
import net.deechael.dodo.event.EventHandler;
import net.deechael.dodo.event.Listener;
import net.deechael.dodo.event.channel.ChannelMessageEvent;
import net.deechael.dodo.event.channel.MessageReactionEvent;
import net.deechael.dodo.impl.DodoBot;
import net.deechael.dodo.types.MessageType;

import java.io.File;
import java.util.Arrays;

public class TestBot implements Listener /* 继承监听器 */{

    @EventHandler // 该Annotation表示下面的方法是一个监听器方法
    public void onMessage(ChannelMessageEvent event /* 这里只能有一个参数,并且是一个Event */) {
        MessageContext context = event.getContext(); // 获取消息的上下文信息
        Island island = context.getIsland(); // 获取消息发送的群组
        Channel channel = context.getChannel(); // 获取消息发送的频道
        Member member = event.getMember(); // 获取发送消息的用户
        Message bodyContent = event.getBody(); // 获取消息的内容
        if (bodyContent.getType() == MessageType.TEXT) { // 如果是纯文本内容
            String content = bodyContent.get().getAsJsonObject().get("content").getAsString(); // 通过Gson库获得消息的纯文本内容
            //context.reply(new TextMessage("你发送了:" + content)); // 回复用户一个纯文本内容
        }
    }

    @EventHandler
    public void onReaction(MessageReactionEvent event) {
        // 当机器人发送的消息被添加了回应时触发
    }

    public static void main(String[] args) {
        // 打开配置文件里面
        Configuration configuration = YamlConfiguration.loadConfiguration(new File("test-config.yml"));
        // 创建一个Bot对象,第一个参数为clientId,第二个参数为token
        Bot bot = new DodoBot(configuration.getInt("client-id"), configuration.getString("token"));
        // 注册事件监听器
        bot.addEventListener(new TestBot());
        // 注册指令,Brigadier格式注册方法,因为Brigadier指令创建时要求输入名称,所以只需要传入一个执行器即可
        bot.registerCommand(new DodoCommand(new BrigadierCommandExecutor(LiteralArgumentBuilder.<MessageContext>literal("brigadier")
                .then(RequiredArgumentBuilder.<MessageContext, String>argument("name", StringArgumentType.string())
                        .executes(context -> {
                            MessageContext messageContext = context.getSource();
                            messageContext.reply(new TextMessage("你输入了一个参数:" + StringArgumentType.getString(context, "name")));
                            return 1;
                        }))
                .executes(context -> {
                    MessageContext messageContext = context.getSource();
                    messageContext.reply(new TextMessage("你执行了一个无参指令"));
                    return 1;
                })
                .build())));
        // Bukkit风格的Simple指令注册方法,第一个参数为指令名称,第二个为执行器
        bot.registerCommand(new DodoCommand("simple", new SimpleCommandExecutor() {
            @Override
            public void execute(Member sender, MessageContext message, String[] args) {
                System.out.println(Arrays.toString(args));
                if (args.length == 1) {
                    if (args[0].equalsIgnoreCase("a")) {
                        message.reply(new TextMessage("success!"));
                    }
                }
            }
        }));
        // 添加任务,会在成功连接websocket以后运行
        /*
        bot.runAfter(() -> {
            // 将本地图片“test.png”上传至渡渡的服务器
            String url = bot.getClient().uploadImage(new File("test.png"));
            // 输出图片的url
            System.out.println(url);
        });
         */
        // 启动机器人
        bot.start();
    }

}

About

A sdk for imdodo.com

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages