MiraiForum

    • Register
    • Login
    • Search
    • Popular
    • Recent
    • Unsolved
    • Tags
    • Groups
    • 友情链接
    1. Home
    2. MrXiaoM
    3. Posts
    • Profile
    • Following 9
    • Followers 40
    • Topics 37
    • Posts 893
    • Best 216
    • Controversial 0
    • Groups 5

    Posts made by MrXiaoM

    • RE: 有关于开源协议

      mamoe/mirai 的readme里有提到

      mirai 采用 AGPLv3 协议开源。为了整个社区的良性发展,我们强烈建议您做到以下几点:

      间接接触(包括但不限于使用 Http API 或 跨进程技术)到 mirai 的软件使用 AGPLv3 开源

      posted in HTTP API和第三方SDK
      MrXiaoM
      MrXiaoM
    • RE: python怎样@全体成员

      java:

      AtAll.INSTANCE
      
      posted in 开发交流
      MrXiaoM
      MrXiaoM
    • RE: JAVA开发Mirai Console 插件的一些代码和问题

      配置文件这种东西一般不是自己去实现的吗(
      我都是自己定义一个 Config 类然后写成我的风格

      posted in 开发交流
      MrXiaoM
      MrXiaoM
    • [Java][踩坑] 关于中文域名解析 Punycode 编码

      我有一个朋友,他买了个域名,然后绑了 CNAME 和 SRV 记录到我的 Minecraft 服务器上,但可惜的是,Minecraft 客户端并无 Punycode 编码域名支持,然后我用网络爬虫 (低情商: 百度) 搜找到了 Punycode 转码的码子,以为就一劳永逸了,结果这玩意并不完全,下面的是我补好可以直接用的轮子。写得不是很好,如有错希望大佬能指出

      public class Punycode {
      	private static int TMIN = 1;
      	private static int TMAX = 26;
      	private static int BASE = 36;
      	private static int INITIAL_N = 128;
      	private static int INITIAL_BIAS = 72;
      	private static int DAMP = 700;
      	private static int SKEW = 38;
      	private static char DELIMITER = '-';
      
      	public static String encodeURL(String url) {
      		if (!url.contains("."))
      			return url;
      		String mainContent = url.substring(0, url.lastIndexOf("."));
      		String prefix = mainContent.contains(".") ? mainContent.substring(0, mainContent.lastIndexOf(".") + 1) : "";
      		if (mainContent.contains("."))
      			mainContent = mainContent.substring(mainContent.lastIndexOf(".") + 1);
      		mainContent = Punycode.encode(mainContent, "xn--");
      		String suffix = url.substring(url.lastIndexOf("."));
      		return prefix + mainContent + suffix;
      	}
      
      	/**
      	 * 
      	 * Punycodes a unicode string. THIS IS NOT SUITABLE FOR UNICODE AND LETTER
      	 * MIXING
      	 *
      	 * @param input Unicode string.
      	 * 
      	 * @return Punycoded string, but original text for throw an exception
      	 * 
      	 */
      	public static String encode(String input) {
      		return Punycode.encode(input, "");
      	}
      
      	/**
      	 * 
      	 * Punycodes a unicode string. THIS IS NOT SUITABLE FOR UNICODE AND LETTER
      	 * MIXING
      	 *
      	 * @param input Unicode string.
      	 * 
      	 * @return Punycoded string, but original text for throw an exception
      	 * 
      	 */
      	public static String encode(String input, String successPrefix) {
      		int n = INITIAL_N;
      		int delta = 0;
      		int bias = INITIAL_BIAS;
      		StringBuilder output = new StringBuilder();
      		int b = 0;
      		for (int i = 0; i < input.length(); i++) {
      			char c = input.charAt(i);
      			if (isBasic(c)) {
      				output.append(c);
      				b++;
      			}
      		}
      		if(b >= input.length()) return output.toString();
      		if (b > 0) {
      			output.append(DELIMITER);
      		}
      		int h = b;
      		while (h < input.length()) {
      			int m = Integer.MAX_VALUE;
      			for (int i = 0; i < input.length(); i++) {
      				int c = input.charAt(i);
      				if (c >= n && c < m) {
      					m = c;
      				}
      			}
      			if (m - n > (Integer.MAX_VALUE - delta) / (h + 1)) {
      				return input;
      			}
      			delta = delta + (m - n) * (h + 1);
      			n = m;
      			for (int j = 0; j < input.length(); j++) {
      				int c = input.charAt(j);
      				if (c < n) {
      					delta++;
      					if (0 == delta) {
      						return input;
      					}
      				}
      				if (c == n) {
      					int q = delta;
      					for (int k = BASE;; k += BASE) {
      						int t;
      
      						if (k <= bias) {
      							t = TMIN;
      						} else if (k >= bias + TMAX) {
      							t = TMAX;
      						} else {
      							t = k - bias;
      						}
      						if (q < t) {
      							break;
      						}
      						output.append((char) digit2codepoint(t + (q - t) % (BASE - t)));
      						q = (q - t) / (BASE - t);
      					}
      					output.append((char) digit2codepoint(q));
      					bias = adapt(delta, h + 1, h == b);
      					delta = 0;
      					h++;
      				}
      			}
      			delta++;
      			n++;
      		}
      		output.insert(0, successPrefix);
      		return output.toString();
      	}
      
      	private static int adapt(int delta, int numpoints, boolean first) {
      		if (first) {
      			delta = delta / DAMP;
      		} else {
      			delta = delta / 2;
      		}
      		delta = delta + (delta / numpoints);
      		int k = 0;
      		while (delta > ((BASE - TMIN) * TMAX) / 2) {
      			delta = delta / (BASE - TMIN);
      			k = k + BASE;
      		}
      		return k + ((BASE - TMIN + 1) * delta) / (delta + SKEW);
      	}
      
      	private static boolean isBasic(char c) {
      		return c < 0x80;
      	}
      
      	private static int digit2codepoint(int d) {
      		if (d < 26) {
      			return d + 'a';
      		} else if (d < 36) {
      			return d - 26 + '0';
      		} else {
      			return d;
      		}
      	}
      }
      

      CSDN

      那个朋友真不是我自己

      posted in 技术交流板块
      MrXiaoM
      MrXiaoM
    • RE: mirai更新到2.7M1后mirai-api-http插件无法使用

      我都是直接

      java -cp ./content/*;./libraries/* net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader
      

      到 Maven Central 补全 mirai 的包 (bcprov-jdk15on, mirai-core-all, mirai-console, mirai-console-terminal),丢到 content 文件夹里,一直没出过事(
      可能是我爱折腾不喜欢用启动器吧

      posted in BUG反馈
      MrXiaoM
      MrXiaoM
    • RE: 请问大佬们有什么屏蔽消息的思路吗

      @picpo 很蠢的方法…难道是跟我一样吗(

      // onGroupMessage(GroupMessageEvent event)
      if(this.main.getConfig().isBlackList(sender.getSenderID())) return;
      // do sth
      
      posted in 开发交流
      MrXiaoM
      MrXiaoM
    • RE: 如何获取信息链中的元素?

      @zhou2008
      你是不是直接把 MessageChain 显性转换为 At 然后获取 target 了…
      不可能转换得了的,MessageChain 可以被理解为列表,而文字、At、图片等是列表里的元素

      下面这是我从文档里复制来的
      处理富文本消息

      Mirai 不内置富文本消息的处理工具类。MessageChain 实现接口 List<SingleMessage>,一个思路是遍历 list 并判断类型处理:

      for (element : messageChain) {
          if (element instanceof Image) {
              // 处理一个 Image
          }
      }
      

      也可以像数组一样按下标随机访问:

      SingleMessage element = messageChain.get(0);
      if (element instanceof Image) {
          // 处理一个 Image
      }
      

      补:我在java中获取机器人是否被at的代码是这样的,可以参考下:

      boolean isAt = false;
      for (SingleMessage s : event.getMessage()) {
      	if (s instanceof At) {
      		At at = (At) s;
      		if (at.getTarget() == event.getBot().getId()) {
      			isAt = true;
      			break;
      		}
      	}
      }
      if (isAt) {
      	// do sth.
      }
      

      补:刚刚又翻了下文档发觉kt好香啊

      val image: Image? = chain.findIsInstance<Image>()
      
      posted in 开发交流
      MrXiaoM
      MrXiaoM
    • RE: Mirai点歌插件

      最低支持到 0.5.2… 现在真的还会有人用 2.0 以下的版本吗
      mark 下,以后再来下载看看好不好用 ✓

      posted in 插件发布
      MrXiaoM
      MrXiaoM
    • 氧化钙

      简单地还原了下Microsoft的某个载入动画,然后把图形“点”换成了文字“草”
      bilibili video

      posted in 摸鱼区
      MrXiaoM
      MrXiaoM
    • RE: 策划 NanaIro 你🐴什么时候死

      @yoonching 直接快进到语法不规范(
      C#和Java混着写,草

      不过这个idea挺好的,支持

      posted in 摸鱼区
      MrXiaoM
      MrXiaoM
    • RE: 策划 NanaIro 你🐴什么时候死

      n人觉得这条测评很欢乐

      posted in 摸鱼区
      MrXiaoM
      MrXiaoM
    • RE: [纯属娱乐]Mirai币

      因忘记备份,钱包已变动(
      TQvKnYb9rqK2gZeDtQjedRbqNch24gb92x

      posted in 摸鱼区
      MrXiaoM
      MrXiaoM
    • RE: mirai 有退群 协议吗?假如,复读机

      我的代码质量老低了… 仅供参考

      
      		if(event.getSender().getPermission() == MemberPermission.ADMINISTRATOR||
      				event.getSender().getPermission() == MemberPermission.OWNER) {
      			boolean atFlag = false;
      			for(int i = 0;i<event.getMessage().size();i++) {
      				SingleMessage single = event.getMessage().get(i);
      				if(!atFlag) {
      					if(single instanceof At) {
      						if(((At)single).getTarget() == event.getBot().getId()) {
      							atFlag = true;
      						}
      					}
      				}
      				else {
      					if(single.contentToString().contains("有缘再会")) {
      						event.getGroup().sendMessage("拜拜了您嘞");
      						event.getGroup().quit();
      						break;
      					}
      				}
      			}
      		}
      
      posted in 使用交流
      MrXiaoM
      MrXiaoM
    • RE: mirai 有退群 协议吗?假如,复读机

      监听 GroupMessageEvent
      判断发送者的身份和发送的内容,如果符合你指定的条件就

      event.getGroup().quit();
      
      posted in 使用交流
      MrXiaoM
      MrXiaoM
    • RE: *卡在开头的萌新()

      @zuichen 一是载入 chat-commands 时找不到类,二是找不到方法 java.nio.file.Files.exist(Path, [LinkOption]),毕竟载入插件是个实验性功能,不能要求太高,在插件功能稳定前最好使用 mirai-console 而不是 MiraiAndroid

      posted in 使用交流
      MrXiaoM
      MrXiaoM
    • RE: idea这里gradle下载有403

      bintray 通道早就停止提供服务了说…
      如果能找到其他下载源就好,我用 Eclipse 因为只要新建个文件指定插件主类路径一直都莫得问题(
      多翻文档

      posted in 使用交流
      MrXiaoM
      MrXiaoM
    • RE: *卡在开头的萌新()

      啊这,建议问问题时带上你使用的mirai各组件名称及其版本

      然后我更推荐使用 mirai-console 而不是 MiraiAndroid
      我顺藤摸瓜找到的 MiraiAndroid,它的页面说明了 兼容 mirai-console 插件(实验性)
      对于新手,与其使用不稳定的版本,不如租台云服务器或者使用自家电脑来使用 mirai-console

      补充

      对于其他插件请自行尝试;此外,如果你的插件使用了一些 Android 不支持的 api(例如BufferedImage) 那么使用了这个api的功能将绝对不能正常工作

      补充×2
      你觉得你在做什么?

      posted in 使用交流
      MrXiaoM
      MrXiaoM
    • RE: Java如何引入yml工具类实现对yml文件的读写?

      《你的写法是我从来没见过的》

      posted in 开发交流
      MrXiaoM
      MrXiaoM
    • Natsuko - 一只乱七八糟的机器人

      我觉得我这个写得一塌糊涂的机器人不应该发在插件版…

      Github: MrXiaoM/Natsuko

      之前我在我群里一直要承诺把我的机器人开源的,
      但是因为一直没写配置文件让机器人更好编辑而搁置了
      现在懒得写了,写了一半不到的配置文件,剩下一些功能自己去源码改,
      因为这个原因我不会给出编译好的jar,若要使用务必自行编译

      功能

      当前 Natsuko 的功能如下

      • 看涩图(要自己加图进去
      • 黑名单
      • 机器人收到私信自动转发给主人
      • 操控机器人发消息
      • mcban查询
      • Minecraft服务器状态查询 (支持 SRV)
      • 百度新闻
      • 自动回复消息
      • 需要管理手动触发的人机验证 (需要自己加题目)
      • [已弃用且停止维护]Minecraft服务器挂机机器人

      一切以Github页面的README为准

      posted in 其他项目发布
      MrXiaoM
      MrXiaoM
    • 1
    • 2
    • 41
    • 42
    • 43
    • 44
    • 45
    • 44 / 45