XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEExtension

【DLL】XFE各类拓展是一个C#的DLL库,旨在优化C#代码中常用语句的使用,并提供更简洁的访问方式,同时提供Xunit测试框架,快速搭建服务器/客户端,免费ChatGPTAPI接口,免费通讯服务器,XFE下载器,新增格式等

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/XFEExtension

新增XCC图片接收器,现在图片接收更加便利

a2655ff
XFE工作室室长 <xfe18827675401@126.com>
提交于

代码差异

1 个文件 +158 -0
Modified XFE各类拓展/CyberComm.cs +158 -0
@@ -1463,6 +1463,164 @@ namespace XFE各类拓展.CyberComm
1463 1463 }
1464 1464 }
1465 1465 /// <summary>
1466 /// XCC图片接收器
1467 /// </summary>
1468 public class XCCImageReceiveHelper
1469 {
1470 private Dictionary<string, XCCImage> xCCImageDictionary = new Dictionary<string, XCCImage>();
1471 /// <summary>
1472 /// 自动保存到本地
1473 /// </summary>
1474 public bool AutoSaveInLocal { get; }
1475 /// <summary>
1476 /// 保存的根目录
1477 /// </summary>
1478 public string SavePathRoot { get; set; }
1479 /// <summary>
1480 /// 从设置的根目录加载所有图片
1481 /// </summary>
1482 /// <returns></returns>
1483 public async Task LoadImage()
1484 {
1485 await Task.Run(() =>
1486 {
1487 foreach (var groupId in Directory.EnumerateDirectories(SavePathRoot))
1488 {
1489 foreach (var image in Directory.EnumerateFiles($"{SavePathRoot}/{groupId}"))
1490 {
1491 var filePath = $"{SavePathRoot}/{groupId}/{image}";
1492 if (Path.GetExtension(filePath) == ".png")
1493 {
1494 var imageId = Path.GetFileNameWithoutExtension(filePath);
1495 var imageBuffer = File.ReadAllBytes(filePath);
1496 xCCImageDictionary.Add(imageId, new XCCImage(groupId, imageId, imageBuffer));
1497 }
1498 }
1499 }
1500 });
1501 }
1502 /// <summary>
1503 /// 添加图片
1504 /// </summary>
1505 /// <param name="xCCImage">XCC图片实例</param>
1506 public void AddImage(XCCImage xCCImage)
1507 {
1508 xCCImageDictionary.Add(xCCImage.ImageId, xCCImage);
1509 if (AutoSaveInLocal && xCCImage.ImageBuffer != null)
1510 Save(xCCImage);
1511 }
1512 /// <summary>
1513 /// 保存图片
1514 /// </summary>
1515 /// <param name="xCCImage">XCC图片实例</param>
1516 public void Save(XCCImage xCCImage)
1517 {
1518 if (!Directory.Exists($"{SavePathRoot}/{xCCImage.GroupId}"))
1519 {
1520 Directory.CreateDirectory($"{SavePathRoot}/{xCCImage.GroupId}");
1521 }
1522 File.WriteAllBytes($"{SavePathRoot}/{xCCImage.GroupId}/{xCCImage.ImageId}.png", xCCImage.ImageBuffer);
1523 }
1524 /// <summary>
1525 /// 接收图片占位符
1526 /// </summary>
1527 /// <param name="e">事件参数</param>
1528 public void ReceiveImagePlaceHolder(XCCTextMessageReceivedEventArgs e)
1529 {
1530 if (e.MessageType == XCCTextMessageType.Image && !xCCImageDictionary.ContainsKey(e.MessageId))
1531 {
1532 xCCImageDictionary.Add(e.MessageId, new XCCImage(e.GroupId, e.MessageId));
1533 }
1534 }
1535 /// <summary>
1536 /// 接收图片
1537 /// </summary>
1538 /// <param name="e">事件参数</param>
1539 public void ReceiveImage(XCCBinaryMessageReceivedEventArgs e)
1540 {
1541 if (e.MessageType == XCCBinaryMessageType.Image && xCCImageDictionary.ContainsKey(e.MessageId))
1542 {
1543 var xCCImage = xCCImageDictionary[e.MessageId];
1544 if (!xCCImage.Loaded)
1545 {
1546 xCCImageDictionary[e.MessageId].LoadImage(e.BinaryMessage);
1547 if (AutoSaveInLocal)
1548 Save(xCCImage);
1549 }
1550 }
1551 }
1552 /// <summary>
1553 /// XCC图片接收器
1554 /// </summary>
1555 /// <param name="savePathRoot">保存根目录</param>
1556 /// <param name="autoSaveInLocal">自动保存</param>
1557 public XCCImageReceiveHelper(string savePathRoot, bool autoSaveInLocal)
1558 {
1559 AutoSaveInLocal = autoSaveInLocal;
1560 SavePathRoot = savePathRoot;
1561 }
1562 }
1563 /// <summary>
1564 /// XCC图片
1565 /// </summary>
1566 public class XCCImage
1567 {
1568 /// <summary>
1569 /// 图片加载完成时触发
1570 /// </summary>
1571 public event EventHandler<byte[]> ImageLoaded;
1572 /// <summary>
1573 /// 群组ID
1574 /// </summary>
1575 public string GroupId { get; }
1576 /// <summary>
1577 /// 图片ID
1578 /// </summary>
1579 public string ImageId { get; }
1580 /// <summary>
1581 /// 是否已加载
1582 /// </summary>
1583 public bool Loaded { get; private set; }
1584 /// <summary>
1585 /// 图片文件流
1586 /// </summary>
1587 public byte[] ImageBuffer { get; set; }
1588 /// <summary>
1589 /// 加载图片
1590 /// </summary>
1591 /// <param name="imageBuffer">文件流</param>
1592 public void LoadImage(byte[] imageBuffer)
1593 {
1594 ImageBuffer = imageBuffer;
1595 Loaded = true;
1596 ImageLoaded?.Invoke(this, imageBuffer);
1597 }
1598 /// <summary>
1599 /// XCC图片
1600 /// </summary>
1601 /// <param name="groupId">群组ID</param>
1602 /// <param name="imageId">图片ID</param>
1603 /// <param name="imageBuffer">图片的Buffer</param>
1604 public XCCImage(string groupId, string imageId, byte[] imageBuffer)
1605 {
1606 GroupId = groupId;
1607 ImageId = imageId;
1608 ImageBuffer = imageBuffer;
1609 Loaded = true;
1610 }
1611 /// <summary>
1612 /// XCC图片
1613 /// </summary>
1614 /// <param name="groupId">群组ID</param>
1615 /// <param name="imageId">图片ID</param>
1616 public XCCImage(string groupId, string imageId)
1617 {
1618 GroupId = groupId;
1619 ImageId = imageId;
1620 Loaded = false;
1621 }
1622 }
1623 /// <summary>
1466 1624 /// XCC消息
1467 1625 /// </summary>
1468 1626 public class XCCMessage : XFEEntry