MiraiForum

    • 注册
    • 登录
    • 搜索
    • 热门
    • 最新
    • 未解决
    • 标签
    • 群组
    • 友情链接

    已解决 java版command相关问题

    开发交流
    10
    24
    2632
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • Orisland
      Orisland 摸鱼 最后由 Orisland 编辑

      java版的command到底怎么用啊……
      e822d1a7-7984-45e9-82ee-3a6e6c8e1626-image.png
      照着例子搞了半天,发现一直在缺变量,但是例子里压根就没写
      5f27ab66-d58e-4d57-9940-ef24ba25db35-image.png
      然鹅实际上例子里的变量哪来的我都不知道emmm
      00d638c0-5218-4b70-9265-d5fada2d31b6-image.png
      027057d0-94b1-4267-a9df-aa2b44d4fe9a-image.png
      初始化给了两个变量根本不行,这个例子给我整傻了……
      24K萌新求解。
      参考链接

      1 条回复 最后回复 回复 引用 0
      • H
        hundun000 ⭐2021⭐ @Orisland 最后由 hundun000 编辑

        @orisland 在 新手求助java版的command到底怎么用啊…… 中说:
        你这样写的意思就是要求两个参数啊。是来自console文档样例吧,那里也注释了// 这两个参数会被作为指令参数要求

        @Handler
        public void onCommand(CommandSender sender, User target, String mes){
            target.sendMessage(mes);
        }
        

        这才是不需要参数(参考QuizCommand类exit方法):

        @Handler
        public void onCommand(CommandSender sender){
            sender.sendMessage("hello world");
        }
        
        Orisland 1 条回复 最后回复 回复 引用 0
        • Orisland
          Orisland 摸鱼 最后由 编辑

          开发使用文档是不是没更新过?感觉和给的例子对不上……

          1 条回复 最后回复 回复 引用 0
          • Orisland
            Orisland 摸鱼 最后由 编辑

            好家伙,我试了一圈好像都不太能用……

            1 条回复 最后回复 回复 引用 0
            • Samarium150
              Samarium150 童心未泯 最后由 编辑

              为了避免Java这样的蛋疼情况 我去学了Kotlin

              1 条回复 最后回复 回复 引用 1
              • 1
                1328189205 最后由 编辑

                mirai

                一.命令相关操作

                1.创建一个类继承mirai api里的命令

                public final class MyCommend extends JSimpleCommand {
                
                    public static final MyCommend INSTANCE = new MyCommend();
                
                    private MyCommend() {
                        super(Plugin.INSTANCE, "tell", new String[]{"s"}, Plugin.INSTANCE.getParentPermission());
                        this.setDescription("这是测试命令");
                    }
                    @Handler
                    public void onCommand(CommandSender sender, User target,String message) {
                        target.sendMessage(message);
                    }
                }
                

                2.在onEnable()中注册命令

                CommandManager.INSTANCE.registerCommand(MyCommend.INSTANCE,true);
                

                3.就可在消息事件监听中执行命令了

                CommandSenderOnMessage to = new MemberCommandSenderOnMessage(e);
                CommandManager.INSTANCE.executeCommand(to,e.getMessage(),false);	
                
                Orisland H 2 条回复 最后回复 回复 引用 1
                • 1
                  1328189205 最后由 编辑

                  昨天摸索出来的,我也不太懂

                  1 条回复 最后回复 回复 引用 0
                  • StarGods
                    StarGods 最后由 编辑

                    为了避免Java这样的蛋疼情况 我去学了Kotlin

                    1 条回复 最后回复 回复 引用 1
                    • yoonching
                      yoonching 最后由 编辑

                      为了避免Java这样的蛋疼情况 我去学了Kotlin

                      1 条回复 最后回复 回复 引用 0
                      • X
                        xypleiades 最后由 编辑

                        我Java好像没用到command

                        1 条回复 最后回复 回复 引用 0
                        • Orisland
                          Orisland 摸鱼 @1328189205 最后由 编辑

                          @1328189205 感谢,我试试,java相关的代码可太少了……

                          1 条回复 最后回复 回复 引用 0
                          • Him188
                            Him188 最后由 编辑

                            这方面文档确实很缺

                            1 条回复 最后回复 回复 引用 0
                            • H
                              hundun000 ⭐2021⭐ @1328189205 最后由 编辑

                              @1328189205 在 新手求助java版的command到底怎么用啊…… 中说:

                              3.就可在消息事件监听中执行命令了

                              CommandSenderOnMessage to = new MemberCommandSenderOnMessage(e);
                              CommandManager.INSTANCE.executeCommand(to,e.getMessage(),false);	
                              

                              这样用好像有问题。
                              我自己写的SubCommand插件实测发现(直接用JSimpleCommand应该也是同理),如果用户(为了使用别的插件的命令)同时装了chat-command插件,当群消息里发出这条指令时,一方面chat-command插件使得你的onCommand()被调用一次,另一方面你插件里的EventHandler会再使得你的onCommand()被调用一次。一共两次。

                              Orisland 2 条回复 最后回复 回复 引用 0
                              • H
                                hundun000 ⭐2021⭐ 最后由 编辑

                                为了避免Java这样的蛋疼情况 我去学了Kotlin教程里的《混用Java和Kotlin的方法》然后继续用Java

                                1 条回复 最后回复 回复 引用 0
                                • Orisland
                                  Orisland 摸鱼 @hundun000 最后由 编辑

                                  @hundun000 然而似乎我的并不会做出相关反应??

                                  H 1 条回复 最后回复 回复 引用 0
                                  • H
                                    hundun000 ⭐2021⭐ @Orisland 最后由 编辑

                                    @orisland
                                    指的是完整的1、2、3步都做的情况。你如果不是用Command那就不是我所说的情况。

                                    Orisland 3 条回复 最后回复 回复 引用 0
                                    • Orisland
                                      Orisland 摸鱼 @hundun000 最后由 Orisland 编辑

                                      @hundun000

                                          @EventHandler
                                              public ListeningStatus friendListener(FriendMessageEvent event) throws IOException {
                                          
                                                  CommandSenderOnMessage to = new FriendCommandSenderOnMessage(event);
                                                  CommandManager.INSTANCE.executeCommand(to,event.getMessage(),false);
                                      
                                          @SneakyThrows
                                          @Override
                                          public void onEnable() {
                                              getLogger().info("Plugin loaded!");
                                              OSSset();
                                              getLogger().info("OSS loaded!");
                                              setOcr();
                                              getLogger().info("OCR loaded!");
                                      
                                              CommandManager.INSTANCE.registerCommand(Mycommand.INSTANCE, true);
                                      
                                              GlobalEventChannel.INSTANCE.registerListenerHost(new Handler());
                                          }
                                      
                                      public class Mycommand extends JSimpleCommand {
                                          public static final Mycommand INSTANCE = new Mycommand();
                                      
                                          private Mycommand(){
                                              super(Plugin.INSTANCE, "tell", new String[]{"s"}, Plugin.INSTANCE.getParentPermission());
                                              this.setDescription("test command!");
                                          }
                                      
                                          @Handler
                                          public void onCommand(CommandSender sender, User target, String mes){
                                              target.sendMessage(mes);
                                          }
                                      }
                                      

                                      3fd7eeee-e10c-4ffa-9b34-c716faea1bfe-image.png
                                      但是奇怪的是相同的插件我放在服务器上的mirai就会做出响应。
                                      本机进行测试则不响应任何指令。

                                      H 1 条回复 最后回复 回复 引用 0
                                      • Orisland
                                        Orisland 摸鱼 @hundun000 最后由 编辑

                                        同时,似乎我必须要求输入二级命令,尽管我不需要,二级命令这里输入null会直接抛异常。

                                        1 条回复 最后回复 回复 引用 0
                                        • Orisland
                                          Orisland 摸鱼 @hundun000 最后由 编辑

                                          @hundun000 然而问题实际好像是,无法授权?
                                          3f5f4f06-f6e3-4506-bae7-9461218500b3-image.png
                                          cb8f3a59-90c7-4be1-aebc-ccf8c5edff9f-image.png
                                          9dca9910-ad2f-4462-9481-3c9360779e7e-image.png
                                          7b053310-37ee-4098-9b7e-24a5aa24f82f-image.png

                                          问题如下,控制台有效,私聊无效,群聊无效
                                          f718dd23-d75b-4f20-aad4-d23c1737f6fd-image.png

                                          1 条回复 最后回复 回复 引用 0
                                          • cssxsh
                                            cssxsh 最后由 编辑

                                            你也没说你的talk响应是什么

                                            Orisland 1 条回复 最后回复 回复 引用 0
                                            • Orisland
                                              Orisland 摸鱼 @cssxsh 最后由 编辑

                                              @cssxsh 单纯的回复……

                                                  @Handler
                                                  public void onCommand(CommandSender sender, User target, String mes){
                                                      target.sendMessage(mes);
                                                  }
                                              
                                              1 条回复 最后回复 回复 引用 0
                                              • 1
                                              • 2
                                              • 1 / 2
                                              • First post
                                                Last post
                                              Powered by Mamoe Technologies & NodeBB | 友情链接 | 服务监控 | Contact