MiraiForum

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

    Posts made by MrXiaoM

    • RE: AntiSetu --- 群内反涩图插件

      @rainchan 建议直接上 lolicon api 抓图(

      posted in 插件发布
      MrXiaoM
      MrXiaoM
    • RE: 问个蠢问题,看2.7.0更新日志提到了允许日志接管,有没有java示例呢

      docs/Bots.md
      logging/README.md

      posted in 开发交流
      MrXiaoM
      MrXiaoM
    • RE: python怎样@全体成员

      @tomcccc 我认为你应该把报错的日志贴上来

      posted in 开发交流
      MrXiaoM
      MrXiaoM
    • RE: 请问大佬们有什么屏蔽消息的思路吗

      @xing-c
      因为上面已经有 kotlin 的示例了,这里只提 java 的示例。
      所在环境是插件主类,所以可以用 this.getCoroutineContext() 获取到当前协程,用 bot 实例的协程应该也是可以的。
      Example1 - 使用事件频道注册单个事件

      		eventChannel.subscribeAlways(GroupMessageEvent.class, 
      			this.getCoroutineContext(), 
      			ConcurrencyKind.CONCURRENT, 
      			EventPriority.HIGHEST, 
      			e ->{
      				if(e.getSender().getId() == 114514L) {
      					e.intercept();
      					return;
      				}
      			});
      		
      

      Example2 - 在EventHost內注册事件

      	@EventHandler(priority = EventPriority.HIGHEST)
      	public ListeningStatus onGroupMsg(GroupMessageEvent event) {
      		if(event.getSender().getId() == 114514L) {
      			event.intercept();
      			return ListeningStatus.LISTENING;
      		}
      		return ListeningStatus.LISTENING;
      	}
      

      只要多看文档都能写出来的,建议问前多翻阅文档 ✓

      posted in 开发交流
      MrXiaoM
      MrXiaoM
    • RE: 【每日沙雕图】沙雕小别墅

      QQ图片20210911192005.jpg

      posted in 摸鱼区
      MrXiaoM
      MrXiaoM
    • RE: 【每日沙雕图】沙雕小别墅

      @hoshino-tented 结合时事

      posted in 摸鱼区
      MrXiaoM
      MrXiaoM
    • RE: 【每日沙雕图】沙雕小别墅

      QQ图片20210825230414.jpg
      QQ图片20210825232934.jpg

      posted in 摸鱼区
      MrXiaoM
      MrXiaoM
    • RE: 有没有进群验证插件

      https://mirai.mamoe.net/topic/123
      我曾写过一个很草的手动验证
      答案是文件名,题目就是图片,在题库目录随机抽一个文件 ✓

      posted in 摸鱼区
      MrXiaoM
      MrXiaoM
    • RE: 无法登录的临时处理方案

      @g4-simple
      mirai/Bots.md#常见登录失败原因

      posted in 官方公告
      MrXiaoM
      MrXiaoM
    • RE: 彩色文字测试

      滋磁,什么时候把背景色也安排下(

      posted in 摸鱼区
      MrXiaoM
      MrXiaoM
    • RE: 掉线期间的消息怎么接受

      你想要的功能已经被加到不确定在什么版本更新的“Backlog”里程碑里了
      https://github.com/mamoe/mirai/issues/1265
      等就完事了,不知道在什么时候会增加这个新特性

      sxzz created this issue in mamoe/mirai

      closed 增加查询聊天漫游记录功能 #1265

      posted in 开发交流
      MrXiaoM
      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
    • 1
    • 2
    • 40
    • 41
    • 42
    • 43
    • 44
    • 42 / 44