XFEExtension
【DLL】XFE各类拓展是一个C#的DLL库,旨在优化C#代码中常用语句的使用,并提供更简洁的访问方式,同时提供Xunit测试框架,快速搭建服务器/客户端,免费ChatGPTAPI接口,免费通讯服务器,XFE下载器,新增格式等
关注
0
Fork
0
Star
0
返回提交历史
Modified
XFE各类拓展/CyberComm.cs
+158
-0
XFEstudio/XFEExtension
新增XCC图片接收器,现在图片接收更加便利
a2655ff
代码差异
1 个文件
+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