koishi-plugin-chat-patch 1.0.6 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/vue/style.css +115 -0
- package/dist/style.css +1 -1
- package/lib/file-manager.d.ts +1 -0
- package/lib/index.js +95 -51
- package/lib/utils.d.ts +2 -0
- package/package.json +1 -1
- package/src/file-manager.ts +7 -1
- package/src/message-handler.ts +6 -6
- package/src/utils.ts +57 -0
package/client/vue/style.css
CHANGED
|
@@ -1724,4 +1724,119 @@ body.dragging-bubble-global {
|
|
|
1724
1724
|
top: -5px;
|
|
1725
1725
|
right: -5px;
|
|
1726
1726
|
}
|
|
1727
|
+
}
|
|
1728
|
+
|
|
1729
|
+
/* 消息历史区域的滚动条 */
|
|
1730
|
+
.message-history::-webkit-scrollbar {
|
|
1731
|
+
width: 6px;
|
|
1732
|
+
}
|
|
1733
|
+
|
|
1734
|
+
.message-history::-webkit-scrollbar-track {
|
|
1735
|
+
background: transparent;
|
|
1736
|
+
}
|
|
1737
|
+
|
|
1738
|
+
.message-history::-webkit-scrollbar-thumb {
|
|
1739
|
+
background-color: rgba(144, 147, 153, .3);
|
|
1740
|
+
border-radius: 4px;
|
|
1741
|
+
transition: background-color .3s;
|
|
1742
|
+
}
|
|
1743
|
+
|
|
1744
|
+
.message-history::-webkit-scrollbar-thumb:hover {
|
|
1745
|
+
background-color: rgba(144, 147, 153, .5);
|
|
1746
|
+
}
|
|
1747
|
+
|
|
1748
|
+
/* 机器人列表的滚动条 */
|
|
1749
|
+
.bot-items::-webkit-scrollbar {
|
|
1750
|
+
width: 6px;
|
|
1751
|
+
}
|
|
1752
|
+
|
|
1753
|
+
.bot-items::-webkit-scrollbar-track {
|
|
1754
|
+
background: transparent;
|
|
1755
|
+
}
|
|
1756
|
+
|
|
1757
|
+
.bot-items::-webkit-scrollbar-thumb {
|
|
1758
|
+
background-color: rgba(144, 147, 153, .3);
|
|
1759
|
+
border-radius: 4px;
|
|
1760
|
+
transition: background-color .3s;
|
|
1761
|
+
}
|
|
1762
|
+
|
|
1763
|
+
.bot-items::-webkit-scrollbar-thumb:hover {
|
|
1764
|
+
background-color: rgba(144, 147, 153, .5);
|
|
1765
|
+
}
|
|
1766
|
+
|
|
1767
|
+
/* 频道列表的滚动条 */
|
|
1768
|
+
.channel-items::-webkit-scrollbar {
|
|
1769
|
+
width: 6px;
|
|
1770
|
+
}
|
|
1771
|
+
|
|
1772
|
+
.channel-items::-webkit-scrollbar-track {
|
|
1773
|
+
background: transparent;
|
|
1774
|
+
}
|
|
1775
|
+
|
|
1776
|
+
.channel-items::-webkit-scrollbar-thumb {
|
|
1777
|
+
background-color: rgba(144, 147, 153, .3);
|
|
1778
|
+
border-radius: 4px;
|
|
1779
|
+
transition: background-color .3s;
|
|
1780
|
+
}
|
|
1781
|
+
|
|
1782
|
+
.channel-items::-webkit-scrollbar-thumb:hover {
|
|
1783
|
+
background-color: rgba(144, 147, 153, .5);
|
|
1784
|
+
}
|
|
1785
|
+
|
|
1786
|
+
/* 合并转发消息展开区域的滚动条 */
|
|
1787
|
+
.forward-message-expanded::-webkit-scrollbar {
|
|
1788
|
+
width: 6px;
|
|
1789
|
+
}
|
|
1790
|
+
|
|
1791
|
+
.forward-message-expanded::-webkit-scrollbar-track {
|
|
1792
|
+
background: transparent;
|
|
1793
|
+
}
|
|
1794
|
+
|
|
1795
|
+
.forward-message-expanded::-webkit-scrollbar-thumb {
|
|
1796
|
+
background-color: rgba(144, 147, 153, .3);
|
|
1797
|
+
border-radius: 4px;
|
|
1798
|
+
transition: background-color .3s;
|
|
1799
|
+
}
|
|
1800
|
+
|
|
1801
|
+
.forward-message-expanded::-webkit-scrollbar-thumb:hover {
|
|
1802
|
+
background-color: rgba(144, 147, 153, .5);
|
|
1803
|
+
}
|
|
1804
|
+
|
|
1805
|
+
/* JSON内容区域的滚动条 */
|
|
1806
|
+
.json-raw-content::-webkit-scrollbar {
|
|
1807
|
+
width: 6px;
|
|
1808
|
+
}
|
|
1809
|
+
|
|
1810
|
+
.json-raw-content::-webkit-scrollbar-track {
|
|
1811
|
+
background: transparent;
|
|
1812
|
+
}
|
|
1813
|
+
|
|
1814
|
+
.json-raw-content::-webkit-scrollbar-thumb {
|
|
1815
|
+
background-color: rgba(144, 147, 153, .3);
|
|
1816
|
+
border-radius: 4px;
|
|
1817
|
+
transition: background-color .3s;
|
|
1818
|
+
}
|
|
1819
|
+
|
|
1820
|
+
.json-raw-content::-webkit-scrollbar-thumb:hover {
|
|
1821
|
+
background-color: rgba(144, 147, 153, .5);
|
|
1822
|
+
}
|
|
1823
|
+
|
|
1824
|
+
/* 深色模式下的滚动条样式调整 */
|
|
1825
|
+
@media (prefers-color-scheme: dark) {
|
|
1826
|
+
|
|
1827
|
+
.message-history::-webkit-scrollbar-thumb,
|
|
1828
|
+
.bot-items::-webkit-scrollbar-thumb,
|
|
1829
|
+
.channel-items::-webkit-scrollbar-thumb,
|
|
1830
|
+
.forward-message-expanded::-webkit-scrollbar-thumb,
|
|
1831
|
+
.json-raw-content::-webkit-scrollbar-thumb {
|
|
1832
|
+
background-color: rgba(255, 255, 255, .2);
|
|
1833
|
+
}
|
|
1834
|
+
|
|
1835
|
+
.message-history::-webkit-scrollbar-thumb:hover,
|
|
1836
|
+
.bot-items::-webkit-scrollbar-thumb:hover,
|
|
1837
|
+
.channel-items::-webkit-scrollbar-thumb:hover,
|
|
1838
|
+
.forward-message-expanded::-webkit-scrollbar-thumb:hover,
|
|
1839
|
+
.json-raw-content::-webkit-scrollbar-thumb:hover {
|
|
1840
|
+
background-color: rgba(255, 255, 255, .4);
|
|
1841
|
+
}
|
|
1727
1842
|
}
|
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.message-quote[data-v-fc970c70]{margin:8px 0;padding:8px 12px;background-color:#bebebe1a;border-left:4px solid rgba(151,152,152,.45);border-radius:6px;font-size:.9em;position:relative}.quote-indicator[data-v-fc970c70]{font-size:.75em;color:#007bff;font-weight:600;margin-bottom:4px;text-transform:uppercase}.quote-header[data-v-fc970c70]{display:flex;align-items:center;margin-bottom:4px;gap:6px}.quote-avatar[data-v-fc970c70]{width:20px;height:20px;border-radius:50%;overflow:hidden;flex-shrink:0}.quote-avatar img[data-v-fc970c70]{width:100%;height:100%;object-fit:cover}.quote-avatar .avatar-placeholder[data-v-fc970c70]{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background-color:#6c757d;color:#fff;font-size:10px;font-weight:700}.quote-username[data-v-fc970c70]{font-weight:600;color:#007bff;font-size:.85em}.quote-time[data-v-fc970c70]{color:#6c757d;font-size:.75em;margin-left:auto}.quote-content[data-v-fc970c70]{color:#7276b7;line-height:1.3;word-wrap:break-word}.quote-content .message-image[data-v-fc970c70]{max-width:200px;max-height:100px}.quote-content .message-image-container[data-v-fc970c70]{margin:2px 0}@media (prefers-color-scheme: dark){.message-quote[data-v-fc970c70]{background-color:#ffffff14;border-left-color:#0d6efd}.quote-content[data-v-fc970c70]{color:#adb5bd}.quote-username[data-v-fc970c70]{color:#0d6efd}}.chat-container[data-v-fc970c70]{display:flex;height:100vh;background:transparent;margin-left:0%;width:100%;overflow:hidden;color:inherit;position:relative}.bot-list[data-v-fc970c70],.channel-list[data-v-fc970c70],.message-area[data-v-fc970c70]{display:flex;flex-direction:column;background:transparent;border-right:1px solid rgba(128,128,128,.2)}.bot-list[data-v-fc970c70]{width:250px;min-width:250px;max-width:250px;flex-shrink:0}.channel-list[data-v-fc970c70]{width:300px;min-width:300px;max-width:300px;flex-shrink:0}.message-area[data-v-fc970c70]{flex:1;border-right:none}.panel-header[data-v-fc970c70]{padding:16px;border-bottom:1px solid rgba(128,128,128,.2);background:transparent;display:flex;align-items:center;justify-content:space-between}.panel-header h3[data-v-fc970c70]{margin:0;font-size:16px;font-weight:600;color:currentColor}.back-button[data-v-fc970c70]{display:none;background:none;border:none;color:currentColor;font-size:18px;cursor:pointer;padding:4px 8px;border-radius:4px;transition:background-color .2s}.back-button[data-v-fc970c70]:hover{background:#8080801a}.bot-items[data-v-fc970c70],.channel-items[data-v-fc970c70]{flex:1;overflow-y:auto;max-height:calc(100vh - 60px)}.bot-item[data-v-fc970c70],.channel-item[data-v-fc970c70]{display:flex;align-items:center;padding:12px 16px;cursor:pointer;border-bottom:1px solid rgba(128,128,128,.1);transition:background-color .2s}.bot-item[data-v-fc970c70]:hover,.channel-item[data-v-fc970c70]:hover{background:#8080801a}.bot-item.active[data-v-fc970c70],.channel-item.active[data-v-fc970c70]{background:#2196f31a;border-right:3px solid #2196f3}.bot-avatar[data-v-fc970c70]{width:40px;height:40px;margin-right:12px;border-radius:50%;overflow:hidden;display:flex;align-items:center;justify-content:center;background:#e0e0e0}.bot-avatar img[data-v-fc970c70]{width:100%;height:100%;object-fit:cover}.avatar-placeholder[data-v-fc970c70]{font-size:16px;font-weight:700;color:currentColor;opacity:.7}.bot-info[data-v-fc970c70]{flex:1}.bot-name[data-v-fc970c70]{font-weight:500;color:currentColor;margin-bottom:2px}.bot-platform[data-v-fc970c70]{font-size:12px;color:currentColor;opacity:.7}.bot-status[data-v-fc970c70]{width:8px;height:8px;border-radius:50%;margin-left:8px}.bot-status.online[data-v-fc970c70]{background:#4caf50}.bot-status.offline[data-v-fc970c70]{background:#f44336}.channel-info[data-v-fc970c70]{flex:1}.channel-name[data-v-fc970c70]{font-weight:500;color:currentColor;margin-bottom:2px}.channel-type[data-v-fc970c70]{font-size:12px;color:currentColor;opacity:.7}.channel-message-count[data-v-fc970c70]{background:#2196f3;color:#fff;font-size:12px;padding:2px 6px;border-radius:10px;min-width:18px;text-align:center;position:relative;transition:all .2s ease}.channel-message-count.draggable-bubble[data-v-fc970c70]{cursor:grab;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.channel-message-count.draggable-bubble[data-v-fc970c70]:hover{background:#1976d2;transform:scale(1.1);box-shadow:0 2px 8px #2196f34d}.channel-message-count.draggable-bubble[data-v-fc970c70]:active,.channel-message-count.draggable-bubble.dragging[data-v-fc970c70]{cursor:grabbing;background:#1565c0;box-shadow:0 4px 12px #2196f366}.dragging-clone[data-v-fc970c70]{position:fixed;z-index:1000;pointer-events:none;transition:none;box-sizing:border-box;display:flex;align-items:center;justify-content:center;background:#2196f3;color:#fff;font-size:12px;padding:2px 6px;border-radius:10px;min-width:18px;text-align:center;box-shadow:0 4px 12px #2196f366}.dragging-clone.will-delete[data-v-fc970c70]{background:#f44336!important;animation:shake-fc970c70 .3s ease-in-out infinite}@keyframes pulseThreshold-fc970c70{0%,to{opacity:.4;transform:scale(.9);border-color:#f4433699;box-shadow:0 0 15px #f4433633}50%{opacity:.8;transform:scale(1.1);border-color:#f44336;box-shadow:0 0 25px #f4433666}}@keyframes menuSlideIn-fc970c70{0%{transform:translateY(8px);opacity:0}to{transform:translateY(0);opacity:1}}.message-content[data-v-fc970c70]{display:flex;flex-direction:column;height:calc(100vh - 60px);overflow:hidden;position:relative}.message-history[data-v-fc970c70]{flex:1;overflow-y:auto;padding:16px 16px 8px;max-height:calc(100vh - 200px)}.message-item[data-v-fc970c70]{display:flex;margin-bottom:16px;padding:8px;border-radius:8px;transition:background-color .3s ease}.message-item[data-v-fc970c70]:hover{background-color:#8080801a}.message-item.new-message[data-v-fc970c70]{background-color:#4caf5033;animation:highlight-fc970c70 2s ease-out}.message-item.bot-message[data-v-fc970c70]{flex-direction:row-reverse;justify-content:flex-start}.message-item.bot-message .message-avatar[data-v-fc970c70]{margin-right:0;margin-left:12px}.message-item.bot-message .message-content-wrapper[data-v-fc970c70]{display:flex;flex-direction:column;align-items:flex-end}.message-item.bot-message .message-header[data-v-fc970c70]{display:flex;align-items:center;justify-content:flex-end;margin-bottom:4px}.message-item.bot-message .message-username[data-v-fc970c70]{margin-right:0;margin-left:8px;order:2}.message-item.bot-message .message-time[data-v-fc970c70]{order:1}.message-item.bot-message .message-text[data-v-fc970c70]{background-color:#2196f31a;padding:8px 12px;border-radius:12px 12px 4px;display:inline-block;max-width:80%;text-align:left}@keyframes highlight-fc970c70{0%{background-color:#4caf504d}to{background-color:transparent}}.message-avatar[data-v-fc970c70]{width:32px;height:32px;margin-right:12px;border-radius:50%;overflow:hidden;display:flex;align-items:center;justify-content:center;background:#e0e0e0;flex-shrink:0}.message-avatar img[data-v-fc970c70]{width:100%;height:100%;object-fit:cover}.message-avatar .avatar-placeholder[data-v-fc970c70]{font-size:12px;font-weight:700;color:currentColor;opacity:.7}.message-content-wrapper[data-v-fc970c70]{flex:1}.message-header[data-v-fc970c70]{display:flex;align-items:center;margin-bottom:4px}.message-username[data-v-fc970c70]{font-weight:500;color:currentColor;margin-right:8px}.message-time[data-v-fc970c70]{font-size:12px;color:currentColor;opacity:.5}.message-text[data-v-fc970c70]{color:currentColor;line-height:1.4;word-wrap:break-word;word-break:break-word;white-space:pre-wrap;max-width:100%;overflow-wrap:break-word}.message-item:not(.bot-message) .message-text[data-v-fc970c70]{background-color:#8080801a;padding:8px 12px;border-radius:12px 12px 12px 4px;display:inline-block;max-width:80%}.message-input[data-v-fc970c70]{display:flex;flex-direction:column;padding:12px 16px 16px;border-top:1px solid rgba(128,128,128,.2);background:transparent;flex-shrink:0;position:sticky;bottom:0;margin-top:-10px}.input-row[data-v-fc970c70]{display:flex;gap:8px;align-items:center}.floating-scroll-button[data-v-fc970c70]{position:absolute;right:24px;bottom:18%;width:48px;height:48px;background:#2196f3;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 4px 12px #2196f34d;color:#fff;transition:all .3s ease;z-index:100;border:2px solid rgba(255,255,255,.2)}.floating-scroll-button[data-v-fc970c70]:hover{background:#1976d2;transform:scale(1.1);box-shadow:0 6px 16px #2196f366}.floating-scroll-button[data-v-fc970c70]:active{transform:scale(.95)}.input-row button[data-v-fc970c70]{padding:8px 16px;background:#2196f3;color:#fff;border:none;border-radius:4px;cursor:pointer;transition:background-color .2s}.message-image-container[data-v-fc970c70]{margin:8px 0;max-width:100%;display:block}.message-image[data-v-fc970c70]{border-radius:8px;object-fit:contain;display:block;cursor:pointer;transition:transform .2s ease}.message-image-loading[data-v-fc970c70]{display:inline-block;padding:8px 12px;background:#8080801a;border-radius:4px;color:currentColor;opacity:.7;font-size:12px}.message-image-error[data-v-fc970c70]{display:inline-block;padding:8px 12px;background:#f443361a;border:1px solid rgba(244,67,54,.3);border-radius:4px;color:#f44336;font-size:12px;max-width:300px;word-break:break-word}.message-paragraph[data-v-fc970c70]{display:block;margin-bottom:4px}.message-paragraph[data-v-fc970c70]:last-child{margin-bottom:0}.forward-message-container[data-v-fc970c70]{border:1px solid #ffffff;border-radius:8px;margin:4px 0;overflow:hidden;background:#f9f9f900}.forward-message-preview[data-v-fc970c70]{padding:12px;cursor:pointer;transition:background-color .2s}.forward-message-preview[data-v-fc970c70]:hover{background:#f0f0f0}.forward-message-title[data-v-fc970c70]{font-weight:600;color:#333;margin-bottom:8px;font-size:14px}.forward-message-preview-item[data-v-fc970c70]{color:#666;font-size:13px;margin:2px 0;line-height:1.4}.forward-message-footer[data-v-fc970c70]{display:flex;justify-content:space-between;align-items:center;margin-top:8px;padding-top:8px;border-top:1px solid #e8e8e8}.forward-message-count[data-v-fc970c70]{color:#2196f3;font-size:12px}.forward-message-toggle[data-v-fc970c70]{color:#666;font-size:12px}.forward-message-expanded[data-v-fc970c70]{border-top:1px solid #e0e0e0;background:#fff;max-height:400px;overflow-y:auto}.forwarded-message-item[data-v-fc970c70]{padding:12px;border-bottom:1px solid #f0f0f0}.forwarded-message-item[data-v-fc970c70]:last-child{border-bottom:none}.forwarded-message-header[data-v-fc970c70]{display:flex;align-items:center;margin-bottom:6px}.forwarded-message-nickname[data-v-fc970c70]{font-weight:600;color:#333;font-size:13px}.forwarded-message-userid[data-v-fc970c70]{color:#999;font-size:11px;margin-left:6px}.forwarded-message-content[data-v-fc970c70]{color:#555;font-size:13px;line-height:1.4}.message-at[data-v-fc970c70]{background:#2196f31a;color:#2196f3;padding:2px 4px;border-radius:3px;font-weight:500;cursor:pointer}.message-unknown[data-v-fc970c70]{background:#ff98001a;color:#ff9800;padding:2px 4px;border-radius:3px;font-style:italic;cursor:help}.input-row input[data-v-fc970c70]{flex:1;min-width:0;padding:8px 12px;border:1px solid rgba(128,128,128,.3);border-radius:4px;outline:none;background:transparent;color:currentColor}.input-row input[data-v-fc970c70]:focus{border-color:#2196f3;box-shadow:0 0 0 2px #2196f333}.input-row input[data-v-fc970c70]::placeholder{color:currentColor;opacity:.5}.input-row button[data-v-fc970c70]{padding:8px 16px;background:#2196f3;color:#fff;border:none;border-radius:4px;cursor:pointer;transition:background-color .2s;flex-shrink:0;white-space:nowrap}.input-row button[data-v-fc970c70]:hover:not(:disabled){background:#1976d2}.input-row button[data-v-fc970c70]:disabled{background:#8080804d;cursor:not-allowed}.input-row button.is-sending[data-v-fc970c70]{background:#ffc107!important;color:#333!important;cursor:default!important}.message-input .input-row button.is-sending[data-v-fc970c70]{background:#ffc107!important;color:#333!important;cursor:default!important;border-color:#ffc107!important}.empty-state[data-v-fc970c70]{display:flex;align-items:center;justify-content:center;height:100%;color:currentColor;opacity:.5;font-size:14px}.message-text-content[data-v-fc970c70]{display:inline}.message-image-container[data-v-fc970c70]{display:block;margin:4px 0}.message-image[data-v-fc970c70]{border-radius:8px;margin:4px 0;display:block;cursor:pointer;transition:transform .2s ease;object-fit:contain;background:#8080801a}.message-image[data-v-fc970c70]:hover{transform:scale(1.02)}.message-image-loading[data-v-fc970c70]{height:60px;width:200px;border-radius:8px;margin:4px 0;display:flex;align-items:center;justify-content:center;background:#8080801a;color:currentColor;opacity:.7;font-size:14px;border:1px dashed rgba(128,128,128,.3)}.message-image-error[data-v-fc970c70]{min-height:60px;width:200px;border-radius:8px;margin:4px 0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#8080801a;color:currentColor;opacity:.7;font-size:14px;border:1px dashed rgba(128,128,128,.3);padding:8px;text-align:center}.message-at[data-v-fc970c70]{background:#2196f31a;color:#2196f3;padding:2px 6px;border-radius:4px;font-weight:500;cursor:pointer;display:inline-block;margin:0 2px}.message-at[data-v-fc970c70]:hover{background:#2196f333}.message-unknown[data-v-fc970c70]{background:#ff98001a;color:#ff9800;padding:2px 6px;border-radius:4px;font-size:12px;display:inline-block;margin:0 2px;cursor:help}@keyframes pulse-fc970c70{0%,to{transform:translate(-50%,-50%) scale(1)}50%{transform:translate(-50%,-50%) scale(1.1)}}.channel-message-count.will-delete[data-v-fc970c70]{background:#f44336!important;animation:shake-fc970c70 .3s ease-in-out infinite}@keyframes shake-fc970c70{0%,to{transform:translate(0)}25%{transform:translate(-2px)}75%{transform:translate(2px)}}body.dragging-bubble-global[data-v-fc970c70]{user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;cursor:grabbing}.drag-threshold-circle[data-v-fc970c70]{position:fixed;pointer-events:none;border:3px dashed rgba(244,67,54,.8);border-radius:50%;z-index:999;background:#f443361a;box-shadow:0 0 20px #f443364d;animation:pulseThreshold-fc970c70 1.5s ease-in-out infinite}.context-menu[data-v-fc970c70]{position:fixed;background:#ffffffa6;border:1px solid rgba(0,0,0,.1);border-radius:8px;box-shadow:0 8px 32px #00000026;z-index:10000;min-width:180px;backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);overflow:hidden}.context-menu-item[data-v-fc970c70]{padding:12px 16px;cursor:pointer;color:#333;font-size:14px;font-weight:500;transition:all .2s ease;border-bottom:1px solid rgba(0,0,0,.08);position:relative}.context-menu-item[data-v-fc970c70]:last-child{border-bottom:none}.context-menu-item[data-v-fc970c70]:hover{background:#2196f31a;color:#1976d2;transform:translate(2px)}.context-menu-item.danger[data-v-fc970c70]{color:#d32f2f}.context-menu-item.danger[data-v-fc970c70]:hover{background:#f443361a;color:#c62828}.bot-item.pinned[data-v-fc970c70],.channel-item.pinned[data-v-fc970c70]{background:#ffc1071a;border-left:3px solid #ffc107}.bot-item.pinned[data-v-fc970c70]:before,.channel-item.pinned[data-v-fc970c70]:before{content:"📌";position:absolute;left:4px;top:50%;transform:translateY(-50%);font-size:12px;opacity:.7}.bot-item.pinned[data-v-fc970c70],.channel-item.pinned[data-v-fc970c70]{position:relative;padding-left:24px}@media (prefers-color-scheme: dark){.context-menu[data-v-fc970c70]{background:#ffffff26;border-color:#fff3;box-shadow:0 8px 32px #0006}.context-menu-item[data-v-fc970c70]{color:#fff;border-bottom-color:#ffffff1a}.context-menu-item[data-v-fc970c70]:hover{background:#2196f333;color:#64b5f6}.context-menu-item.danger[data-v-fc970c70]{color:#ff8a80}.context-menu-item.danger[data-v-fc970c70]:hover{background:#f4433633;color:#ffab91}.bot-item.pinned[data-v-fc970c70],.channel-item.pinned[data-v-fc970c70]{background:#ffc10726}}.message-share-card[data-v-fc970c70]{display:inline-block;width:75px;margin:8px 0;border:1px solid rgba(128,128,128,.2);border-radius:12px;background:#ffffff0d;transition:all .3s ease;cursor:pointer;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}.message-share-card[data-v-fc970c70]:hover{transform:translateY(-2px);box-shadow:0 8px 24px #00000026;border-color:#2196f34d}.share-card-preview[data-v-fc970c70]{width:100%;position:relative;display:flex;align-items:center;justify-content:center;padding:4px;border-radius:12px 12px 0 0}.share-card-image[data-v-fc970c70]{max-width:calc(100% - 8px);width:auto;height:auto;object-fit:contain;transition:transform .3s ease;display:block;border-radius:4px}.message-share-card:hover .share-card-image[data-v-fc970c70]{transform:scale(1.05)}.share-card-content[data-v-fc970c70]{padding:8px}.share-card-header[data-v-fc970c70]{display:flex;align-items:center;margin-bottom:12px;gap:12px}.share-card-icon[data-v-fc970c70]{width:32px;height:32px;border-radius:8px;object-fit:cover;flex-shrink:0}.share-card-app-info[data-v-fc970c70]{flex:1;min-width:0}.share-card-app-name[data-v-fc970c70]{font-size:12px;color:currentColor;opacity:.7;margin-bottom:2px;font-weight:500}.share-card-title[data-v-fc970c70]{font-size:10px;font-weight:600;color:currentColor;line-height:1.2;word-wrap:break-word;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden}.share-card-desc[data-v-fc970c70]{font-size:14px;color:currentColor;opacity:.8;line-height:1.4;margin-bottom:12px;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;word-wrap:break-word}.share-card-link-hint[data-v-fc970c70]{font-size:12px;color:#2196f3;font-weight:500;display:flex;align-items:center;gap:4px}.share-card-link-hint[data-v-fc970c70]:after{content:"→";transition:transform .2s ease}.message-share-card:hover .share-card-link-hint[data-v-fc970c70]:after{transform:translate(2px)}.message-json-error[data-v-fc970c70],.message-json-raw[data-v-fc970c70]{display:inline-block;margin:8px 0;max-width:400px}.json-error-text[data-v-fc970c70]{color:#f44336;font-size:14px;font-weight:500}.json-label[data-v-fc970c70]{color:currentColor;opacity:.7;font-size:12px;font-weight:500;margin-bottom:8px}.json-raw-data[data-v-fc970c70]{margin-top:8px}.json-raw-data summary[data-v-fc970c70]{cursor:pointer;font-size:12px;color:#2196f3;font-weight:500;padding:4px 8px;border-radius:4px;background:#2196f31a;display:inline-block;transition:background-color .2s ease}.json-raw-data summary[data-v-fc970c70]:hover{background:#2196f333}.json-raw-content[data-v-fc970c70]{margin-top:8px;padding:12px;background:#8080801a;border-radius:8px;font-family:Courier New,monospace;font-size:12px;color:currentColor;opacity:.8;white-space:pre-wrap;word-wrap:break-word;max-height:200px;overflow-y:auto;border:1px solid rgba(128,128,128,.2)}@media (prefers-color-scheme: dark){.message-share-card[data-v-fc970c70]{background:#ffffff14;border-color:#ffffff26}.message-share-card[data-v-fc970c70]:hover{border-color:#2196f380;box-shadow:0 8px 24px #0000004d}.json-raw-content[data-v-fc970c70]{background:#ffffff0d;border-color:#ffffff1a}}@media (max-width: 768px){.chat-container[data-v-fc970c70]{position:relative}.bot-list[data-v-fc970c70],.channel-list[data-v-fc970c70],.message-area[data-v-fc970c70]{position:absolute;top:0;left:0;width:100%;height:100%;transition:transform .3s ease;z-index:1}.bot-list[data-v-fc970c70]{transform:translate(0);z-index:3}.channel-list[data-v-fc970c70]{transform:translate(100%);z-index:2}.message-area[data-v-fc970c70]{transform:translate(200%);z-index:1}.chat-container.show-channels .bot-list[data-v-fc970c70]{transform:translate(-100%)}.chat-container.show-channels .channel-list[data-v-fc970c70]{transform:translate(0);z-index:3}.chat-container.show-channels .message-area[data-v-fc970c70]{transform:translate(100%)}.chat-container.show-messages .bot-list[data-v-fc970c70]{transform:translate(-200%)}.chat-container.show-messages .channel-list[data-v-fc970c70]{transform:translate(-100%)}.chat-container.show-messages .message-area[data-v-fc970c70]{transform:translate(0);z-index:3}.back-button[data-v-fc970c70]{display:none!important}.panel-header[data-v-fc970c70]{flex-direction:row-reverse;position:sticky;top:0;z-index:5;background:inherit}.panel-header h3[data-v-fc970c70]{text-align:right}.floating-scroll-button[data-v-fc970c70]{right:16px;bottom:70px;width:40px;height:40px}.message-input[data-v-fc970c70]{padding:8px 12px 12px;position:fixed;bottom:0;left:0;right:0;background:inherit;border-top:1px solid rgba(128,128,128,.2);z-index:10}.input-row input[data-v-fc970c70]{font-size:16px;padding:10px 12px}.input-row button[data-v-fc970c70]{padding:10px 16px;font-size:16px}.message-history[data-v-fc970c70]{padding:12px 12px 80px;max-height:calc(100vh - 140px)}.message-item[data-v-fc970c70]{margin-bottom:12px;padding:6px}.message-avatar[data-v-fc970c70]{width:28px;height:28px;margin-right:8px}.message-item.bot-message .message-avatar[data-v-fc970c70]{margin-left:8px}.message-image[data-v-fc970c70]{max-width:280px;max-height:160px}.quote-content .message-image[data-v-fc970c70]{max-width:150px;max-height:80px}.context-menu[data-v-fc970c70]{min-width:160px;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}.context-menu-item[data-v-fc970c70]{padding:14px 16px;font-size:16px}.bot-item[data-v-fc970c70],.channel-item[data-v-fc970c70]{padding:14px 16px}.bot-avatar[data-v-fc970c70]{width:36px;height:36px;margin-right:10px}.bot-name[data-v-fc970c70],.channel-name[data-v-fc970c70]{font-size:15px}.bot-platform[data-v-fc970c70],.channel-type[data-v-fc970c70]{font-size:13px}}@media (min-width: 769px) and (max-width: 1024px){.bot-list[data-v-fc970c70]{width:220px;min-width:220px;max-width:220px}.channel-list[data-v-fc970c70]{width:280px;min-width:280px;max-width:280px}.message-image[data-v-fc970c70]{max-width:350px;max-height:180px}}.chat-container.swiping[data-v-fc970c70]{overflow:hidden}.bot-list.swiping[data-v-fc970c70],.channel-list.swiping[data-v-fc970c70],.message-area.swiping[data-v-fc970c70]{transition:none!important}.swipe-indicator[data-v-fc970c70]{position:fixed;top:50%;left:20px;transform:translateY(-50%);background:#2196f3cc;color:#fff;padding:8px 12px;border-radius:20px;font-size:14px;z-index:1000;opacity:0;transition:opacity .2s ease;pointer-events:none;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}.swipe-indicator.show[data-v-fc970c70]{opacity:1}.message-area .message-content[data-v-fc970c70]{padding-bottom:80px}.image-preview-container[data-v-fc970c70]{display:flex;flex-wrap:wrap;gap:8px;padding:8px 0;margin-bottom:8px;border-bottom:1px solid rgba(128,128,128,.1)}.image-preview-item[data-v-fc970c70]{position:relative;width:60px;height:60px;border-radius:8px;overflow:hidden;border:2px solid rgba(33,150,243,.3);background:#8080801a}.preview-image[data-v-fc970c70]{width:100%;height:100%;object-fit:cover;display:block}.remove-image-btn[data-v-fc970c70]{position:absolute;top:-6px;right:-6px;width:20px;height:20px;border-radius:50%;background:#f44336;color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:12px;transition:all .2s ease;box-shadow:0 2px 4px #0003}.remove-image-btn[data-v-fc970c70]:hover{background:#d32f2f;transform:scale(1.1)}.input-actions[data-v-fc970c70]{position:relative;margin-right:8px}.add-button[data-v-fc970c70]{width:36px;height:36px;border-radius:12px;background:linear-gradient(135deg,#667eea,#764ba2);border:none;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .3s cubic-bezier(.4,0,.2,1);flex-shrink:0;box-shadow:0 2px 8px #667eea4d;position:relative;overflow:hidden}.add-button[data-v-fc970c70]:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(135deg,#fff3,#ffffff1a);border-radius:12px;opacity:0;transition:opacity .3s ease}.add-button[data-v-fc970c70]:hover{transform:translateY(-2px) scale(1.05);box-shadow:0 4px 16px #667eea66}.add-button[data-v-fc970c70]:hover:before{opacity:1}.add-button.active[data-v-fc970c70]{background:linear-gradient(135deg,#f093fb,#f5576c);transform:translateY(-2px) scale(1.05) rotate(45deg);box-shadow:0 4px 16px #f5576c66}.add-button[data-v-fc970c70]:active{transform:translateY(0) scale(.98);transition:all .1s ease}.action-menu[data-v-fc970c70]{position:absolute;bottom:100%;left:0;margin-bottom:12px;background:#fffffffa;border:none;border-radius:16px;box-shadow:0 8px 32px #0000001f,0 2px 8px #00000014;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);overflow:hidden;z-index:1000;min-width:140px;transform:translateY(8px);opacity:0;animation:menuSlideIn-fc970c70 .3s cubic-bezier(.4,0,.2,1) forwards}.action-menu-item[data-v-fc970c70]{display:flex;align-items:center;gap:12px;padding:14px 18px;background:none;border:none;color:#333;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s cubic-bezier(.4,0,.2,1);width:100%;text-align:left;position:relative}.action-menu-item[data-v-fc970c70]:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:linear-gradient(135deg,#667eea,#764ba2);transform:scaleY(0);transition:transform .2s cubic-bezier(.4,0,.2,1)}.action-menu-item[data-v-fc970c70]:hover{background:linear-gradient(90deg,#667eea14,#764ba214);color:#667eea;transform:translate(4px)}.action-menu-item[data-v-fc970c70]:hover:before{transform:scaleY(1)}.action-menu-item svg[data-v-fc970c70]{flex-shrink:0}@media (prefers-color-scheme: dark){.action-menu[data-v-fc970c70]{background:#1e1e1efa;box-shadow:0 8px 32px #0000004d,0 2px 8px #0003}.action-menu-item[data-v-fc970c70]{color:#fff}.action-menu-item[data-v-fc970c70]:before{background:linear-gradient(135deg,#4facfe,#00f2fe)}.action-menu-item[data-v-fc970c70]:hover{background:linear-gradient(90deg,#4facfe1f,#00f2fe1f);color:#4facfe}.add-button[data-v-fc970c70]{background:linear-gradient(135deg,#4facfe,#00f2fe);box-shadow:0 2px 8px #4facfe4d}.add-button[data-v-fc970c70]:hover{box-shadow:0 4px 16px #4facfe66}.add-button.active[data-v-fc970c70]{background:linear-gradient(135deg,#fa709a,#fee140);box-shadow:0 4px 16px #fa709a66}.image-preview-item[data-v-fc970c70]{border-color:#64b5f680;background:#ffffff0d}}@media (max-width: 768px){.image-preview-container[data-v-fc970c70]{padding:6px 0;margin-bottom:6px}.image-preview-item[data-v-fc970c70]{width:50px;height:50px}.add-button[data-v-fc970c70]{width:32px;height:32px;border-radius:10px}.action-menu[data-v-fc970c70]{min-width:100px}.action-menu-item[data-v-fc970c70]{padding:10px 12px;font-size:13px}.remove-image-btn[data-v-fc970c70]{width:18px;height:18px;top:-5px;right:-5px}}.layout-iframe{width:100%;height:100%;border:none}
|
|
1
|
+
.message-quote[data-v-fc970c70]{margin:8px 0;padding:8px 12px;background-color:#bebebe1a;border-left:4px solid rgba(151,152,152,.45);border-radius:6px;font-size:.9em;position:relative}.quote-indicator[data-v-fc970c70]{font-size:.75em;color:#007bff;font-weight:600;margin-bottom:4px;text-transform:uppercase}.quote-header[data-v-fc970c70]{display:flex;align-items:center;margin-bottom:4px;gap:6px}.quote-avatar[data-v-fc970c70]{width:20px;height:20px;border-radius:50%;overflow:hidden;flex-shrink:0}.quote-avatar img[data-v-fc970c70]{width:100%;height:100%;object-fit:cover}.quote-avatar .avatar-placeholder[data-v-fc970c70]{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background-color:#6c757d;color:#fff;font-size:10px;font-weight:700}.quote-username[data-v-fc970c70]{font-weight:600;color:#007bff;font-size:.85em}.quote-time[data-v-fc970c70]{color:#6c757d;font-size:.75em;margin-left:auto}.quote-content[data-v-fc970c70]{color:#7276b7;line-height:1.3;word-wrap:break-word}.quote-content .message-image[data-v-fc970c70]{max-width:200px;max-height:100px}.quote-content .message-image-container[data-v-fc970c70]{margin:2px 0}@media (prefers-color-scheme: dark){.message-quote[data-v-fc970c70]{background-color:#ffffff14;border-left-color:#0d6efd}.quote-content[data-v-fc970c70]{color:#adb5bd}.quote-username[data-v-fc970c70]{color:#0d6efd}}.chat-container[data-v-fc970c70]{display:flex;height:100vh;background:transparent;margin-left:0%;width:100%;overflow:hidden;color:inherit;position:relative}.bot-list[data-v-fc970c70],.channel-list[data-v-fc970c70],.message-area[data-v-fc970c70]{display:flex;flex-direction:column;background:transparent;border-right:1px solid rgba(128,128,128,.2)}.bot-list[data-v-fc970c70]{width:250px;min-width:250px;max-width:250px;flex-shrink:0}.channel-list[data-v-fc970c70]{width:300px;min-width:300px;max-width:300px;flex-shrink:0}.message-area[data-v-fc970c70]{flex:1;border-right:none}.panel-header[data-v-fc970c70]{padding:16px;border-bottom:1px solid rgba(128,128,128,.2);background:transparent;display:flex;align-items:center;justify-content:space-between}.panel-header h3[data-v-fc970c70]{margin:0;font-size:16px;font-weight:600;color:currentColor}.back-button[data-v-fc970c70]{display:none;background:none;border:none;color:currentColor;font-size:18px;cursor:pointer;padding:4px 8px;border-radius:4px;transition:background-color .2s}.back-button[data-v-fc970c70]:hover{background:#8080801a}.bot-items[data-v-fc970c70],.channel-items[data-v-fc970c70]{flex:1;overflow-y:auto;max-height:calc(100vh - 60px)}.bot-item[data-v-fc970c70],.channel-item[data-v-fc970c70]{display:flex;align-items:center;padding:12px 16px;cursor:pointer;border-bottom:1px solid rgba(128,128,128,.1);transition:background-color .2s}.bot-item[data-v-fc970c70]:hover,.channel-item[data-v-fc970c70]:hover{background:#8080801a}.bot-item.active[data-v-fc970c70],.channel-item.active[data-v-fc970c70]{background:#2196f31a;border-right:3px solid #2196f3}.bot-avatar[data-v-fc970c70]{width:40px;height:40px;margin-right:12px;border-radius:50%;overflow:hidden;display:flex;align-items:center;justify-content:center;background:#e0e0e0}.bot-avatar img[data-v-fc970c70]{width:100%;height:100%;object-fit:cover}.avatar-placeholder[data-v-fc970c70]{font-size:16px;font-weight:700;color:currentColor;opacity:.7}.bot-info[data-v-fc970c70]{flex:1}.bot-name[data-v-fc970c70]{font-weight:500;color:currentColor;margin-bottom:2px}.bot-platform[data-v-fc970c70]{font-size:12px;color:currentColor;opacity:.7}.bot-status[data-v-fc970c70]{width:8px;height:8px;border-radius:50%;margin-left:8px}.bot-status.online[data-v-fc970c70]{background:#4caf50}.bot-status.offline[data-v-fc970c70]{background:#f44336}.channel-info[data-v-fc970c70]{flex:1}.channel-name[data-v-fc970c70]{font-weight:500;color:currentColor;margin-bottom:2px}.channel-type[data-v-fc970c70]{font-size:12px;color:currentColor;opacity:.7}.channel-message-count[data-v-fc970c70]{background:#2196f3;color:#fff;font-size:12px;padding:2px 6px;border-radius:10px;min-width:18px;text-align:center;position:relative;transition:all .2s ease}.channel-message-count.draggable-bubble[data-v-fc970c70]{cursor:grab;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.channel-message-count.draggable-bubble[data-v-fc970c70]:hover{background:#1976d2;transform:scale(1.1);box-shadow:0 2px 8px #2196f34d}.channel-message-count.draggable-bubble[data-v-fc970c70]:active,.channel-message-count.draggable-bubble.dragging[data-v-fc970c70]{cursor:grabbing;background:#1565c0;box-shadow:0 4px 12px #2196f366}.dragging-clone[data-v-fc970c70]{position:fixed;z-index:1000;pointer-events:none;transition:none;box-sizing:border-box;display:flex;align-items:center;justify-content:center;background:#2196f3;color:#fff;font-size:12px;padding:2px 6px;border-radius:10px;min-width:18px;text-align:center;box-shadow:0 4px 12px #2196f366}.dragging-clone.will-delete[data-v-fc970c70]{background:#f44336!important;animation:shake-fc970c70 .3s ease-in-out infinite}@keyframes pulseThreshold-fc970c70{0%,to{opacity:.4;transform:scale(.9);border-color:#f4433699;box-shadow:0 0 15px #f4433633}50%{opacity:.8;transform:scale(1.1);border-color:#f44336;box-shadow:0 0 25px #f4433666}}@keyframes menuSlideIn-fc970c70{0%{transform:translateY(8px);opacity:0}to{transform:translateY(0);opacity:1}}.message-content[data-v-fc970c70]{display:flex;flex-direction:column;height:calc(100vh - 60px);overflow:hidden;position:relative}.message-history[data-v-fc970c70]{flex:1;overflow-y:auto;padding:16px 16px 8px;max-height:calc(100vh - 200px)}.message-item[data-v-fc970c70]{display:flex;margin-bottom:16px;padding:8px;border-radius:8px;transition:background-color .3s ease}.message-item[data-v-fc970c70]:hover{background-color:#8080801a}.message-item.new-message[data-v-fc970c70]{background-color:#4caf5033;animation:highlight-fc970c70 2s ease-out}.message-item.bot-message[data-v-fc970c70]{flex-direction:row-reverse;justify-content:flex-start}.message-item.bot-message .message-avatar[data-v-fc970c70]{margin-right:0;margin-left:12px}.message-item.bot-message .message-content-wrapper[data-v-fc970c70]{display:flex;flex-direction:column;align-items:flex-end}.message-item.bot-message .message-header[data-v-fc970c70]{display:flex;align-items:center;justify-content:flex-end;margin-bottom:4px}.message-item.bot-message .message-username[data-v-fc970c70]{margin-right:0;margin-left:8px;order:2}.message-item.bot-message .message-time[data-v-fc970c70]{order:1}.message-item.bot-message .message-text[data-v-fc970c70]{background-color:#2196f31a;padding:8px 12px;border-radius:12px 12px 4px;display:inline-block;max-width:80%;text-align:left}@keyframes highlight-fc970c70{0%{background-color:#4caf504d}to{background-color:transparent}}.message-avatar[data-v-fc970c70]{width:32px;height:32px;margin-right:12px;border-radius:50%;overflow:hidden;display:flex;align-items:center;justify-content:center;background:#e0e0e0;flex-shrink:0}.message-avatar img[data-v-fc970c70]{width:100%;height:100%;object-fit:cover}.message-avatar .avatar-placeholder[data-v-fc970c70]{font-size:12px;font-weight:700;color:currentColor;opacity:.7}.message-content-wrapper[data-v-fc970c70]{flex:1}.message-header[data-v-fc970c70]{display:flex;align-items:center;margin-bottom:4px}.message-username[data-v-fc970c70]{font-weight:500;color:currentColor;margin-right:8px}.message-time[data-v-fc970c70]{font-size:12px;color:currentColor;opacity:.5}.message-text[data-v-fc970c70]{color:currentColor;line-height:1.4;word-wrap:break-word;word-break:break-word;white-space:pre-wrap;max-width:100%;overflow-wrap:break-word}.message-item:not(.bot-message) .message-text[data-v-fc970c70]{background-color:#8080801a;padding:8px 12px;border-radius:12px 12px 12px 4px;display:inline-block;max-width:80%}.message-input[data-v-fc970c70]{display:flex;flex-direction:column;padding:12px 16px 16px;border-top:1px solid rgba(128,128,128,.2);background:transparent;flex-shrink:0;position:sticky;bottom:0;margin-top:-10px}.input-row[data-v-fc970c70]{display:flex;gap:8px;align-items:center}.floating-scroll-button[data-v-fc970c70]{position:absolute;right:24px;bottom:18%;width:48px;height:48px;background:#2196f3;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 4px 12px #2196f34d;color:#fff;transition:all .3s ease;z-index:100;border:2px solid rgba(255,255,255,.2)}.floating-scroll-button[data-v-fc970c70]:hover{background:#1976d2;transform:scale(1.1);box-shadow:0 6px 16px #2196f366}.floating-scroll-button[data-v-fc970c70]:active{transform:scale(.95)}.input-row button[data-v-fc970c70]{padding:8px 16px;background:#2196f3;color:#fff;border:none;border-radius:4px;cursor:pointer;transition:background-color .2s}.message-image-container[data-v-fc970c70]{margin:8px 0;max-width:100%;display:block}.message-image[data-v-fc970c70]{border-radius:8px;object-fit:contain;display:block;cursor:pointer;transition:transform .2s ease}.message-image-loading[data-v-fc970c70]{display:inline-block;padding:8px 12px;background:#8080801a;border-radius:4px;color:currentColor;opacity:.7;font-size:12px}.message-image-error[data-v-fc970c70]{display:inline-block;padding:8px 12px;background:#f443361a;border:1px solid rgba(244,67,54,.3);border-radius:4px;color:#f44336;font-size:12px;max-width:300px;word-break:break-word}.message-paragraph[data-v-fc970c70]{display:block;margin-bottom:4px}.message-paragraph[data-v-fc970c70]:last-child{margin-bottom:0}.forward-message-container[data-v-fc970c70]{border:1px solid #ffffff;border-radius:8px;margin:4px 0;overflow:hidden;background:#f9f9f900}.forward-message-preview[data-v-fc970c70]{padding:12px;cursor:pointer;transition:background-color .2s}.forward-message-preview[data-v-fc970c70]:hover{background:#f0f0f0}.forward-message-title[data-v-fc970c70]{font-weight:600;color:#333;margin-bottom:8px;font-size:14px}.forward-message-preview-item[data-v-fc970c70]{color:#666;font-size:13px;margin:2px 0;line-height:1.4}.forward-message-footer[data-v-fc970c70]{display:flex;justify-content:space-between;align-items:center;margin-top:8px;padding-top:8px;border-top:1px solid #e8e8e8}.forward-message-count[data-v-fc970c70]{color:#2196f3;font-size:12px}.forward-message-toggle[data-v-fc970c70]{color:#666;font-size:12px}.forward-message-expanded[data-v-fc970c70]{border-top:1px solid #e0e0e0;background:#fff;max-height:400px;overflow-y:auto}.forwarded-message-item[data-v-fc970c70]{padding:12px;border-bottom:1px solid #f0f0f0}.forwarded-message-item[data-v-fc970c70]:last-child{border-bottom:none}.forwarded-message-header[data-v-fc970c70]{display:flex;align-items:center;margin-bottom:6px}.forwarded-message-nickname[data-v-fc970c70]{font-weight:600;color:#333;font-size:13px}.forwarded-message-userid[data-v-fc970c70]{color:#999;font-size:11px;margin-left:6px}.forwarded-message-content[data-v-fc970c70]{color:#555;font-size:13px;line-height:1.4}.message-at[data-v-fc970c70]{background:#2196f31a;color:#2196f3;padding:2px 4px;border-radius:3px;font-weight:500;cursor:pointer}.message-unknown[data-v-fc970c70]{background:#ff98001a;color:#ff9800;padding:2px 4px;border-radius:3px;font-style:italic;cursor:help}.input-row input[data-v-fc970c70]{flex:1;min-width:0;padding:8px 12px;border:1px solid rgba(128,128,128,.3);border-radius:4px;outline:none;background:transparent;color:currentColor}.input-row input[data-v-fc970c70]:focus{border-color:#2196f3;box-shadow:0 0 0 2px #2196f333}.input-row input[data-v-fc970c70]::placeholder{color:currentColor;opacity:.5}.input-row button[data-v-fc970c70]{padding:8px 16px;background:#2196f3;color:#fff;border:none;border-radius:4px;cursor:pointer;transition:background-color .2s;flex-shrink:0;white-space:nowrap}.input-row button[data-v-fc970c70]:hover:not(:disabled){background:#1976d2}.input-row button[data-v-fc970c70]:disabled{background:#8080804d;cursor:not-allowed}.input-row button.is-sending[data-v-fc970c70]{background:#ffc107!important;color:#333!important;cursor:default!important}.message-input .input-row button.is-sending[data-v-fc970c70]{background:#ffc107!important;color:#333!important;cursor:default!important;border-color:#ffc107!important}.empty-state[data-v-fc970c70]{display:flex;align-items:center;justify-content:center;height:100%;color:currentColor;opacity:.5;font-size:14px}.message-text-content[data-v-fc970c70]{display:inline}.message-image-container[data-v-fc970c70]{display:block;margin:4px 0}.message-image[data-v-fc970c70]{border-radius:8px;margin:4px 0;display:block;cursor:pointer;transition:transform .2s ease;object-fit:contain;background:#8080801a}.message-image[data-v-fc970c70]:hover{transform:scale(1.02)}.message-image-loading[data-v-fc970c70]{height:60px;width:200px;border-radius:8px;margin:4px 0;display:flex;align-items:center;justify-content:center;background:#8080801a;color:currentColor;opacity:.7;font-size:14px;border:1px dashed rgba(128,128,128,.3)}.message-image-error[data-v-fc970c70]{min-height:60px;width:200px;border-radius:8px;margin:4px 0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#8080801a;color:currentColor;opacity:.7;font-size:14px;border:1px dashed rgba(128,128,128,.3);padding:8px;text-align:center}.message-at[data-v-fc970c70]{background:#2196f31a;color:#2196f3;padding:2px 6px;border-radius:4px;font-weight:500;cursor:pointer;display:inline-block;margin:0 2px}.message-at[data-v-fc970c70]:hover{background:#2196f333}.message-unknown[data-v-fc970c70]{background:#ff98001a;color:#ff9800;padding:2px 6px;border-radius:4px;font-size:12px;display:inline-block;margin:0 2px;cursor:help}@keyframes pulse-fc970c70{0%,to{transform:translate(-50%,-50%) scale(1)}50%{transform:translate(-50%,-50%) scale(1.1)}}.channel-message-count.will-delete[data-v-fc970c70]{background:#f44336!important;animation:shake-fc970c70 .3s ease-in-out infinite}@keyframes shake-fc970c70{0%,to{transform:translate(0)}25%{transform:translate(-2px)}75%{transform:translate(2px)}}body.dragging-bubble-global[data-v-fc970c70]{user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;cursor:grabbing}.drag-threshold-circle[data-v-fc970c70]{position:fixed;pointer-events:none;border:3px dashed rgba(244,67,54,.8);border-radius:50%;z-index:999;background:#f443361a;box-shadow:0 0 20px #f443364d;animation:pulseThreshold-fc970c70 1.5s ease-in-out infinite}.context-menu[data-v-fc970c70]{position:fixed;background:#ffffffa6;border:1px solid rgba(0,0,0,.1);border-radius:8px;box-shadow:0 8px 32px #00000026;z-index:10000;min-width:180px;backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);overflow:hidden}.context-menu-item[data-v-fc970c70]{padding:12px 16px;cursor:pointer;color:#333;font-size:14px;font-weight:500;transition:all .2s ease;border-bottom:1px solid rgba(0,0,0,.08);position:relative}.context-menu-item[data-v-fc970c70]:last-child{border-bottom:none}.context-menu-item[data-v-fc970c70]:hover{background:#2196f31a;color:#1976d2;transform:translate(2px)}.context-menu-item.danger[data-v-fc970c70]{color:#d32f2f}.context-menu-item.danger[data-v-fc970c70]:hover{background:#f443361a;color:#c62828}.bot-item.pinned[data-v-fc970c70],.channel-item.pinned[data-v-fc970c70]{background:#ffc1071a;border-left:3px solid #ffc107}.bot-item.pinned[data-v-fc970c70]:before,.channel-item.pinned[data-v-fc970c70]:before{content:"📌";position:absolute;left:4px;top:50%;transform:translateY(-50%);font-size:12px;opacity:.7}.bot-item.pinned[data-v-fc970c70],.channel-item.pinned[data-v-fc970c70]{position:relative;padding-left:24px}@media (prefers-color-scheme: dark){.context-menu[data-v-fc970c70]{background:#ffffff26;border-color:#fff3;box-shadow:0 8px 32px #0006}.context-menu-item[data-v-fc970c70]{color:#fff;border-bottom-color:#ffffff1a}.context-menu-item[data-v-fc970c70]:hover{background:#2196f333;color:#64b5f6}.context-menu-item.danger[data-v-fc970c70]{color:#ff8a80}.context-menu-item.danger[data-v-fc970c70]:hover{background:#f4433633;color:#ffab91}.bot-item.pinned[data-v-fc970c70],.channel-item.pinned[data-v-fc970c70]{background:#ffc10726}}.message-share-card[data-v-fc970c70]{display:inline-block;width:75px;margin:8px 0;border:1px solid rgba(128,128,128,.2);border-radius:12px;background:#ffffff0d;transition:all .3s ease;cursor:pointer;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}.message-share-card[data-v-fc970c70]:hover{transform:translateY(-2px);box-shadow:0 8px 24px #00000026;border-color:#2196f34d}.share-card-preview[data-v-fc970c70]{width:100%;position:relative;display:flex;align-items:center;justify-content:center;padding:4px;border-radius:12px 12px 0 0}.share-card-image[data-v-fc970c70]{max-width:calc(100% - 8px);width:auto;height:auto;object-fit:contain;transition:transform .3s ease;display:block;border-radius:4px}.message-share-card:hover .share-card-image[data-v-fc970c70]{transform:scale(1.05)}.share-card-content[data-v-fc970c70]{padding:8px}.share-card-header[data-v-fc970c70]{display:flex;align-items:center;margin-bottom:12px;gap:12px}.share-card-icon[data-v-fc970c70]{width:32px;height:32px;border-radius:8px;object-fit:cover;flex-shrink:0}.share-card-app-info[data-v-fc970c70]{flex:1;min-width:0}.share-card-app-name[data-v-fc970c70]{font-size:12px;color:currentColor;opacity:.7;margin-bottom:2px;font-weight:500}.share-card-title[data-v-fc970c70]{font-size:10px;font-weight:600;color:currentColor;line-height:1.2;word-wrap:break-word;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden}.share-card-desc[data-v-fc970c70]{font-size:14px;color:currentColor;opacity:.8;line-height:1.4;margin-bottom:12px;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;word-wrap:break-word}.share-card-link-hint[data-v-fc970c70]{font-size:12px;color:#2196f3;font-weight:500;display:flex;align-items:center;gap:4px}.share-card-link-hint[data-v-fc970c70]:after{content:"→";transition:transform .2s ease}.message-share-card:hover .share-card-link-hint[data-v-fc970c70]:after{transform:translate(2px)}.message-json-error[data-v-fc970c70],.message-json-raw[data-v-fc970c70]{display:inline-block;margin:8px 0;max-width:400px}.json-error-text[data-v-fc970c70]{color:#f44336;font-size:14px;font-weight:500}.json-label[data-v-fc970c70]{color:currentColor;opacity:.7;font-size:12px;font-weight:500;margin-bottom:8px}.json-raw-data[data-v-fc970c70]{margin-top:8px}.json-raw-data summary[data-v-fc970c70]{cursor:pointer;font-size:12px;color:#2196f3;font-weight:500;padding:4px 8px;border-radius:4px;background:#2196f31a;display:inline-block;transition:background-color .2s ease}.json-raw-data summary[data-v-fc970c70]:hover{background:#2196f333}.json-raw-content[data-v-fc970c70]{margin-top:8px;padding:12px;background:#8080801a;border-radius:8px;font-family:Courier New,monospace;font-size:12px;color:currentColor;opacity:.8;white-space:pre-wrap;word-wrap:break-word;max-height:200px;overflow-y:auto;border:1px solid rgba(128,128,128,.2)}@media (prefers-color-scheme: dark){.message-share-card[data-v-fc970c70]{background:#ffffff14;border-color:#ffffff26}.message-share-card[data-v-fc970c70]:hover{border-color:#2196f380;box-shadow:0 8px 24px #0000004d}.json-raw-content[data-v-fc970c70]{background:#ffffff0d;border-color:#ffffff1a}}@media (max-width: 768px){.chat-container[data-v-fc970c70]{position:relative}.bot-list[data-v-fc970c70],.channel-list[data-v-fc970c70],.message-area[data-v-fc970c70]{position:absolute;top:0;left:0;width:100%;height:100%;transition:transform .3s ease;z-index:1}.bot-list[data-v-fc970c70]{transform:translate(0);z-index:3}.channel-list[data-v-fc970c70]{transform:translate(100%);z-index:2}.message-area[data-v-fc970c70]{transform:translate(200%);z-index:1}.chat-container.show-channels .bot-list[data-v-fc970c70]{transform:translate(-100%)}.chat-container.show-channels .channel-list[data-v-fc970c70]{transform:translate(0);z-index:3}.chat-container.show-channels .message-area[data-v-fc970c70]{transform:translate(100%)}.chat-container.show-messages .bot-list[data-v-fc970c70]{transform:translate(-200%)}.chat-container.show-messages .channel-list[data-v-fc970c70]{transform:translate(-100%)}.chat-container.show-messages .message-area[data-v-fc970c70]{transform:translate(0);z-index:3}.back-button[data-v-fc970c70]{display:none!important}.panel-header[data-v-fc970c70]{flex-direction:row-reverse;position:sticky;top:0;z-index:5;background:inherit}.panel-header h3[data-v-fc970c70]{text-align:right}.floating-scroll-button[data-v-fc970c70]{right:16px;bottom:70px;width:40px;height:40px}.message-input[data-v-fc970c70]{padding:8px 12px 12px;position:fixed;bottom:0;left:0;right:0;background:inherit;border-top:1px solid rgba(128,128,128,.2);z-index:10}.input-row input[data-v-fc970c70]{font-size:16px;padding:10px 12px}.input-row button[data-v-fc970c70]{padding:10px 16px;font-size:16px}.message-history[data-v-fc970c70]{padding:12px 12px 80px;max-height:calc(100vh - 140px)}.message-item[data-v-fc970c70]{margin-bottom:12px;padding:6px}.message-avatar[data-v-fc970c70]{width:28px;height:28px;margin-right:8px}.message-item.bot-message .message-avatar[data-v-fc970c70]{margin-left:8px}.message-image[data-v-fc970c70]{max-width:280px;max-height:160px}.quote-content .message-image[data-v-fc970c70]{max-width:150px;max-height:80px}.context-menu[data-v-fc970c70]{min-width:160px;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}.context-menu-item[data-v-fc970c70]{padding:14px 16px;font-size:16px}.bot-item[data-v-fc970c70],.channel-item[data-v-fc970c70]{padding:14px 16px}.bot-avatar[data-v-fc970c70]{width:36px;height:36px;margin-right:10px}.bot-name[data-v-fc970c70],.channel-name[data-v-fc970c70]{font-size:15px}.bot-platform[data-v-fc970c70],.channel-type[data-v-fc970c70]{font-size:13px}}@media (min-width: 769px) and (max-width: 1024px){.bot-list[data-v-fc970c70]{width:220px;min-width:220px;max-width:220px}.channel-list[data-v-fc970c70]{width:280px;min-width:280px;max-width:280px}.message-image[data-v-fc970c70]{max-width:350px;max-height:180px}}.chat-container.swiping[data-v-fc970c70]{overflow:hidden}.bot-list.swiping[data-v-fc970c70],.channel-list.swiping[data-v-fc970c70],.message-area.swiping[data-v-fc970c70]{transition:none!important}.swipe-indicator[data-v-fc970c70]{position:fixed;top:50%;left:20px;transform:translateY(-50%);background:#2196f3cc;color:#fff;padding:8px 12px;border-radius:20px;font-size:14px;z-index:1000;opacity:0;transition:opacity .2s ease;pointer-events:none;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}.swipe-indicator.show[data-v-fc970c70]{opacity:1}.message-area .message-content[data-v-fc970c70]{padding-bottom:80px}.image-preview-container[data-v-fc970c70]{display:flex;flex-wrap:wrap;gap:8px;padding:8px 0;margin-bottom:8px;border-bottom:1px solid rgba(128,128,128,.1)}.image-preview-item[data-v-fc970c70]{position:relative;width:60px;height:60px;border-radius:8px;overflow:hidden;border:2px solid rgba(33,150,243,.3);background:#8080801a}.preview-image[data-v-fc970c70]{width:100%;height:100%;object-fit:cover;display:block}.remove-image-btn[data-v-fc970c70]{position:absolute;top:-6px;right:-6px;width:20px;height:20px;border-radius:50%;background:#f44336;color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:12px;transition:all .2s ease;box-shadow:0 2px 4px #0003}.remove-image-btn[data-v-fc970c70]:hover{background:#d32f2f;transform:scale(1.1)}.input-actions[data-v-fc970c70]{position:relative;margin-right:8px}.add-button[data-v-fc970c70]{width:36px;height:36px;border-radius:12px;background:linear-gradient(135deg,#667eea,#764ba2);border:none;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .3s cubic-bezier(.4,0,.2,1);flex-shrink:0;box-shadow:0 2px 8px #667eea4d;position:relative;overflow:hidden}.add-button[data-v-fc970c70]:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(135deg,#fff3,#ffffff1a);border-radius:12px;opacity:0;transition:opacity .3s ease}.add-button[data-v-fc970c70]:hover{transform:translateY(-2px) scale(1.05);box-shadow:0 4px 16px #667eea66}.add-button[data-v-fc970c70]:hover:before{opacity:1}.add-button.active[data-v-fc970c70]{background:linear-gradient(135deg,#f093fb,#f5576c);transform:translateY(-2px) scale(1.05) rotate(45deg);box-shadow:0 4px 16px #f5576c66}.add-button[data-v-fc970c70]:active{transform:translateY(0) scale(.98);transition:all .1s ease}.action-menu[data-v-fc970c70]{position:absolute;bottom:100%;left:0;margin-bottom:12px;background:#fffffffa;border:none;border-radius:16px;box-shadow:0 8px 32px #0000001f,0 2px 8px #00000014;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);overflow:hidden;z-index:1000;min-width:140px;transform:translateY(8px);opacity:0;animation:menuSlideIn-fc970c70 .3s cubic-bezier(.4,0,.2,1) forwards}.action-menu-item[data-v-fc970c70]{display:flex;align-items:center;gap:12px;padding:14px 18px;background:none;border:none;color:#333;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s cubic-bezier(.4,0,.2,1);width:100%;text-align:left;position:relative}.action-menu-item[data-v-fc970c70]:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:linear-gradient(135deg,#667eea,#764ba2);transform:scaleY(0);transition:transform .2s cubic-bezier(.4,0,.2,1)}.action-menu-item[data-v-fc970c70]:hover{background:linear-gradient(90deg,#667eea14,#764ba214);color:#667eea;transform:translate(4px)}.action-menu-item[data-v-fc970c70]:hover:before{transform:scaleY(1)}.action-menu-item svg[data-v-fc970c70]{flex-shrink:0}@media (prefers-color-scheme: dark){.action-menu[data-v-fc970c70]{background:#1e1e1efa;box-shadow:0 8px 32px #0000004d,0 2px 8px #0003}.action-menu-item[data-v-fc970c70]{color:#fff}.action-menu-item[data-v-fc970c70]:before{background:linear-gradient(135deg,#4facfe,#00f2fe)}.action-menu-item[data-v-fc970c70]:hover{background:linear-gradient(90deg,#4facfe1f,#00f2fe1f);color:#4facfe}.add-button[data-v-fc970c70]{background:linear-gradient(135deg,#4facfe,#00f2fe);box-shadow:0 2px 8px #4facfe4d}.add-button[data-v-fc970c70]:hover{box-shadow:0 4px 16px #4facfe66}.add-button.active[data-v-fc970c70]{background:linear-gradient(135deg,#fa709a,#fee140);box-shadow:0 4px 16px #fa709a66}.image-preview-item[data-v-fc970c70]{border-color:#64b5f680;background:#ffffff0d}}@media (max-width: 768px){.image-preview-container[data-v-fc970c70]{padding:6px 0;margin-bottom:6px}.image-preview-item[data-v-fc970c70]{width:50px;height:50px}.add-button[data-v-fc970c70]{width:32px;height:32px;border-radius:10px}.action-menu[data-v-fc970c70]{min-width:100px}.action-menu-item[data-v-fc970c70]{padding:10px 12px;font-size:13px}.remove-image-btn[data-v-fc970c70]{width:18px;height:18px;top:-5px;right:-5px}}.message-history[data-v-fc970c70]::-webkit-scrollbar{width:6px}.message-history[data-v-fc970c70]::-webkit-scrollbar-track{background:transparent}.message-history[data-v-fc970c70]::-webkit-scrollbar-thumb{background-color:#9093994d;border-radius:4px;transition:background-color .3s}.message-history[data-v-fc970c70]::-webkit-scrollbar-thumb:hover{background-color:#90939980}.bot-items[data-v-fc970c70]::-webkit-scrollbar{width:6px}.bot-items[data-v-fc970c70]::-webkit-scrollbar-track{background:transparent}.bot-items[data-v-fc970c70]::-webkit-scrollbar-thumb{background-color:#9093994d;border-radius:4px;transition:background-color .3s}.bot-items[data-v-fc970c70]::-webkit-scrollbar-thumb:hover{background-color:#90939980}.channel-items[data-v-fc970c70]::-webkit-scrollbar{width:6px}.channel-items[data-v-fc970c70]::-webkit-scrollbar-track{background:transparent}.channel-items[data-v-fc970c70]::-webkit-scrollbar-thumb{background-color:#9093994d;border-radius:4px;transition:background-color .3s}.channel-items[data-v-fc970c70]::-webkit-scrollbar-thumb:hover{background-color:#90939980}.forward-message-expanded[data-v-fc970c70]::-webkit-scrollbar{width:6px}.forward-message-expanded[data-v-fc970c70]::-webkit-scrollbar-track{background:transparent}.forward-message-expanded[data-v-fc970c70]::-webkit-scrollbar-thumb{background-color:#9093994d;border-radius:4px;transition:background-color .3s}.forward-message-expanded[data-v-fc970c70]::-webkit-scrollbar-thumb:hover{background-color:#90939980}.json-raw-content[data-v-fc970c70]::-webkit-scrollbar{width:6px}.json-raw-content[data-v-fc970c70]::-webkit-scrollbar-track{background:transparent}.json-raw-content[data-v-fc970c70]::-webkit-scrollbar-thumb{background-color:#9093994d;border-radius:4px;transition:background-color .3s}.json-raw-content[data-v-fc970c70]::-webkit-scrollbar-thumb:hover{background-color:#90939980}@media (prefers-color-scheme: dark){.message-history[data-v-fc970c70]::-webkit-scrollbar-thumb,.bot-items[data-v-fc970c70]::-webkit-scrollbar-thumb,.channel-items[data-v-fc970c70]::-webkit-scrollbar-thumb,.forward-message-expanded[data-v-fc970c70]::-webkit-scrollbar-thumb,.json-raw-content[data-v-fc970c70]::-webkit-scrollbar-thumb{background-color:#fff3}.message-history[data-v-fc970c70]::-webkit-scrollbar-thumb:hover,.bot-items[data-v-fc970c70]::-webkit-scrollbar-thumb:hover,.channel-items[data-v-fc970c70]::-webkit-scrollbar-thumb:hover,.forward-message-expanded[data-v-fc970c70]::-webkit-scrollbar-thumb:hover,.json-raw-content[data-v-fc970c70]::-webkit-scrollbar-thumb:hover{background-color:#fff6}}.layout-iframe{width:100%;height:100%;border:none}
|
package/lib/file-manager.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -44,12 +44,98 @@ var import_node_path2 = __toESM(require("node:path"));
|
|
|
44
44
|
// src/file-manager.ts
|
|
45
45
|
var import_node_path = __toESM(require("node:path"));
|
|
46
46
|
var import_node_fs = __toESM(require("node:fs"));
|
|
47
|
+
|
|
48
|
+
// src/utils.ts
|
|
49
|
+
var Utils = class {
|
|
50
|
+
constructor(config) {
|
|
51
|
+
this.config = config;
|
|
52
|
+
}
|
|
53
|
+
static {
|
|
54
|
+
__name(this, "Utils");
|
|
55
|
+
}
|
|
56
|
+
// 检查平台是否被屏蔽
|
|
57
|
+
isPlatformBlocked(platform) {
|
|
58
|
+
if (!this.config.blockedPlatforms || this.config.blockedPlatforms.length === 0) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
for (const blockedPlatform of this.config.blockedPlatforms) {
|
|
62
|
+
if (blockedPlatform.exactMatch) {
|
|
63
|
+
if (platform === blockedPlatform.platformName) {
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
} else {
|
|
67
|
+
if (platform.includes(blockedPlatform.platformName)) {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
// 递归提取所有文本内容的函数
|
|
75
|
+
extractTextContent(elements) {
|
|
76
|
+
let text = "";
|
|
77
|
+
for (const element of elements) {
|
|
78
|
+
if (element.type === "text") {
|
|
79
|
+
text += element.attrs?.content || "";
|
|
80
|
+
} else if (element.type === "p") {
|
|
81
|
+
if (element.children && element.children.length > 0) {
|
|
82
|
+
text += this.extractTextContent(element.children) + "\n";
|
|
83
|
+
}
|
|
84
|
+
} else if (element.children && element.children.length > 0) {
|
|
85
|
+
text += this.extractTextContent(element.children);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return text;
|
|
89
|
+
}
|
|
90
|
+
// 检查字符串是否为base64格式
|
|
91
|
+
isBase64(str) {
|
|
92
|
+
if (!str || typeof str !== "string") return false;
|
|
93
|
+
if (str.startsWith("data:")) {
|
|
94
|
+
return str.includes("base64,");
|
|
95
|
+
}
|
|
96
|
+
if (str.length > 100) {
|
|
97
|
+
const base64Regex = /^[A-Za-z0-9+/]*={0,2}$/;
|
|
98
|
+
return base64Regex.test(str);
|
|
99
|
+
}
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
// 清理对象中的base64内容
|
|
103
|
+
cleanBase64Content(obj) {
|
|
104
|
+
if (obj === null || obj === void 0) {
|
|
105
|
+
return obj;
|
|
106
|
+
}
|
|
107
|
+
if (typeof obj === "string") {
|
|
108
|
+
if (this.isBase64(obj)) {
|
|
109
|
+
return "暂不支持记录base64内容";
|
|
110
|
+
}
|
|
111
|
+
return obj;
|
|
112
|
+
}
|
|
113
|
+
if (Array.isArray(obj)) {
|
|
114
|
+
return obj.map((item) => this.cleanBase64Content(item));
|
|
115
|
+
}
|
|
116
|
+
if (typeof obj === "object") {
|
|
117
|
+
const cleaned = {};
|
|
118
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
119
|
+
if (typeof value === "string" && (key === "src" || key === "url" || key === "file" || key === "data" || key === "content") && this.isBase64(value)) {
|
|
120
|
+
cleaned[key] = "暂不支持记录base64内容";
|
|
121
|
+
} else {
|
|
122
|
+
cleaned[key] = this.cleanBase64Content(value);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return cleaned;
|
|
126
|
+
}
|
|
127
|
+
return obj;
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
// src/file-manager.ts
|
|
47
132
|
var FileManager = class {
|
|
48
133
|
constructor(ctx, config) {
|
|
49
134
|
this.ctx = ctx;
|
|
50
135
|
this.config = config;
|
|
51
136
|
this.dataFilePath = import_node_path.default.resolve(ctx.baseDir, "data", "chat-patch", "chat-data.json");
|
|
52
137
|
this.logger = ctx.logger("chat-patch");
|
|
138
|
+
this.utils = new Utils(config);
|
|
53
139
|
}
|
|
54
140
|
static {
|
|
55
141
|
__name(this, "FileManager");
|
|
@@ -57,6 +143,7 @@ var FileManager = class {
|
|
|
57
143
|
dataFilePath;
|
|
58
144
|
fileOperationLock = Promise.resolve();
|
|
59
145
|
logger;
|
|
146
|
+
utils;
|
|
60
147
|
// 确保目录存在
|
|
61
148
|
ensureDataDir() {
|
|
62
149
|
const dir = import_node_path.default.dirname(this.dataFilePath);
|
|
@@ -147,8 +234,9 @@ var FileManager = class {
|
|
|
147
234
|
if (!messageInfo.timestamp) {
|
|
148
235
|
messageInfo.timestamp = Date.now();
|
|
149
236
|
}
|
|
237
|
+
const cleanedMessageInfo = this.utils.cleanBase64Content(messageInfo);
|
|
150
238
|
const beforeCount = data.messages[channelKey].length;
|
|
151
|
-
data.messages[channelKey].push(
|
|
239
|
+
data.messages[channelKey].push(cleanedMessageInfo);
|
|
152
240
|
const afterCount = data.messages[channelKey].length;
|
|
153
241
|
if (data.messages[channelKey].length > this.config.maxMessagesPerChannel) {
|
|
154
242
|
data.messages[channelKey].sort((a, b) => a.timestamp - b.timestamp);
|
|
@@ -181,50 +269,6 @@ var FileManager = class {
|
|
|
181
269
|
}
|
|
182
270
|
};
|
|
183
271
|
|
|
184
|
-
// src/utils.ts
|
|
185
|
-
var Utils = class {
|
|
186
|
-
constructor(config) {
|
|
187
|
-
this.config = config;
|
|
188
|
-
}
|
|
189
|
-
static {
|
|
190
|
-
__name(this, "Utils");
|
|
191
|
-
}
|
|
192
|
-
// 检查平台是否被屏蔽
|
|
193
|
-
isPlatformBlocked(platform) {
|
|
194
|
-
if (!this.config.blockedPlatforms || this.config.blockedPlatforms.length === 0) {
|
|
195
|
-
return false;
|
|
196
|
-
}
|
|
197
|
-
for (const blockedPlatform of this.config.blockedPlatforms) {
|
|
198
|
-
if (blockedPlatform.exactMatch) {
|
|
199
|
-
if (platform === blockedPlatform.platformName) {
|
|
200
|
-
return true;
|
|
201
|
-
}
|
|
202
|
-
} else {
|
|
203
|
-
if (platform.includes(blockedPlatform.platformName)) {
|
|
204
|
-
return true;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
return false;
|
|
209
|
-
}
|
|
210
|
-
// 递归提取所有文本内容的函数
|
|
211
|
-
extractTextContent(elements) {
|
|
212
|
-
let text = "";
|
|
213
|
-
for (const element of elements) {
|
|
214
|
-
if (element.type === "text") {
|
|
215
|
-
text += element.attrs?.content || "";
|
|
216
|
-
} else if (element.type === "p") {
|
|
217
|
-
if (element.children && element.children.length > 0) {
|
|
218
|
-
text += this.extractTextContent(element.children) + "\n";
|
|
219
|
-
}
|
|
220
|
-
} else if (element.children && element.children.length > 0) {
|
|
221
|
-
text += this.extractTextContent(element.children);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
return text;
|
|
225
|
-
}
|
|
226
|
-
};
|
|
227
|
-
|
|
228
272
|
// src/message-handler.ts
|
|
229
273
|
var MessageHandler = class {
|
|
230
274
|
constructor(ctx, config, fileManager) {
|
|
@@ -325,12 +369,12 @@ var MessageHandler = class {
|
|
|
325
369
|
timestamp,
|
|
326
370
|
channelId: session.channelId,
|
|
327
371
|
selfId: session.selfId,
|
|
328
|
-
elements,
|
|
372
|
+
elements: this.utils.cleanBase64Content(elements),
|
|
329
373
|
type: "user",
|
|
330
374
|
guildId: session.guildId,
|
|
331
375
|
guildName,
|
|
332
376
|
platform: session.platform || "unknown",
|
|
333
|
-
quote: quoteInfo
|
|
377
|
+
quote: quoteInfo ? this.utils.cleanBase64Content(quoteInfo) : void 0
|
|
334
378
|
};
|
|
335
379
|
await this.fileManager.addMessageToFile(messageInfo);
|
|
336
380
|
const messageEvent = {
|
|
@@ -347,8 +391,8 @@ var MessageHandler = class {
|
|
|
347
391
|
guildId: session.guildId,
|
|
348
392
|
guildName,
|
|
349
393
|
channelType: session.type || 0,
|
|
350
|
-
elements,
|
|
351
|
-
quote: quoteInfo,
|
|
394
|
+
elements: this.utils.cleanBase64Content(elements),
|
|
395
|
+
quote: quoteInfo ? this.utils.cleanBase64Content(quoteInfo) : void 0,
|
|
352
396
|
bot: {
|
|
353
397
|
avatar: session.bot.user?.avatar,
|
|
354
398
|
name: session.bot.user?.name
|
|
@@ -378,7 +422,7 @@ var MessageHandler = class {
|
|
|
378
422
|
timestamp,
|
|
379
423
|
channelId: session.event?.channel?.id || session.channelId,
|
|
380
424
|
selfId: session.selfId,
|
|
381
|
-
elements: session.event?.message?.elements,
|
|
425
|
+
elements: this.utils.cleanBase64Content(session.event?.message?.elements),
|
|
382
426
|
type: "bot",
|
|
383
427
|
guildId: session.event?.guild?.id || session.guildId,
|
|
384
428
|
guildName,
|
|
@@ -399,7 +443,7 @@ var MessageHandler = class {
|
|
|
399
443
|
guildId: session.event?.guild?.id || session.guildId,
|
|
400
444
|
guildName,
|
|
401
445
|
channelType: session.event?.channel?.type || session.type || 0,
|
|
402
|
-
elements: session.event?.message?.elements,
|
|
446
|
+
elements: this.utils.cleanBase64Content(session.event?.message?.elements),
|
|
403
447
|
bot: {
|
|
404
448
|
avatar: session.bot.user?.avatar,
|
|
405
449
|
name: session.bot.user?.name
|
package/lib/utils.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "koishi-plugin-chat-patch",
|
|
3
3
|
"description": "[<ruby>chat-patch<rp>(</rp><rt>点我预览效果</rt><rp>)</rp></ruby>](https://i0.hdslb.com/bfs/openplatform/71074dfc9e5256fc3333d8bd8478bec1af874046.png) 视奸小插件((bushi( (低性能警告)。手机端适配。灵感来自 chat 插件。",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.8",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"typings": "lib/index.d.ts",
|
|
7
7
|
"files": [
|
package/src/file-manager.ts
CHANGED
|
@@ -3,11 +3,13 @@ import fs from 'node:fs'
|
|
|
3
3
|
import { Context, Logger } from 'koishi'
|
|
4
4
|
import { ChatData, MessageInfo } from './types'
|
|
5
5
|
import { Config } from './config'
|
|
6
|
+
import { Utils } from './utils'
|
|
6
7
|
|
|
7
8
|
export class FileManager {
|
|
8
9
|
private dataFilePath: string
|
|
9
10
|
private fileOperationLock = Promise.resolve()
|
|
10
11
|
private logger: Logger
|
|
12
|
+
private utils: Utils
|
|
11
13
|
|
|
12
14
|
constructor(
|
|
13
15
|
private ctx: Context,
|
|
@@ -15,6 +17,7 @@ export class FileManager {
|
|
|
15
17
|
) {
|
|
16
18
|
this.dataFilePath = path.resolve(ctx.baseDir, 'data', 'chat-patch', 'chat-data.json')
|
|
17
19
|
this.logger = ctx.logger('chat-patch')
|
|
20
|
+
this.utils = new Utils(config)
|
|
18
21
|
}
|
|
19
22
|
|
|
20
23
|
// 确保目录存在
|
|
@@ -119,8 +122,11 @@ export class FileManager {
|
|
|
119
122
|
messageInfo.timestamp = Date.now()
|
|
120
123
|
}
|
|
121
124
|
|
|
125
|
+
// 清理消息中的base64内容
|
|
126
|
+
const cleanedMessageInfo = this.utils.cleanBase64Content(messageInfo) as MessageInfo
|
|
127
|
+
|
|
122
128
|
const beforeCount = data.messages[channelKey].length
|
|
123
|
-
data.messages[channelKey].push(
|
|
129
|
+
data.messages[channelKey].push(cleanedMessageInfo)
|
|
124
130
|
const afterCount = data.messages[channelKey].length
|
|
125
131
|
|
|
126
132
|
// 限制消息数量 - 保留最新的消息
|
package/src/message-handler.ts
CHANGED
|
@@ -127,12 +127,12 @@ export class MessageHandler {
|
|
|
127
127
|
timestamp: timestamp,
|
|
128
128
|
channelId: session.channelId,
|
|
129
129
|
selfId: session.selfId,
|
|
130
|
-
elements: elements,
|
|
130
|
+
elements: this.utils.cleanBase64Content(elements),
|
|
131
131
|
type: 'user',
|
|
132
132
|
guildId: session.guildId,
|
|
133
133
|
guildName: guildName,
|
|
134
134
|
platform: session.platform || 'unknown',
|
|
135
|
-
quote: quoteInfo
|
|
135
|
+
quote: quoteInfo ? this.utils.cleanBase64Content(quoteInfo) : undefined
|
|
136
136
|
}
|
|
137
137
|
|
|
138
138
|
await this.fileManager.addMessageToFile(messageInfo)
|
|
@@ -151,8 +151,8 @@ export class MessageHandler {
|
|
|
151
151
|
guildId: session.guildId,
|
|
152
152
|
guildName: guildName,
|
|
153
153
|
channelType: session.type || 0,
|
|
154
|
-
elements: elements,
|
|
155
|
-
quote: quoteInfo,
|
|
154
|
+
elements: this.utils.cleanBase64Content(elements),
|
|
155
|
+
quote: quoteInfo ? this.utils.cleanBase64Content(quoteInfo) : undefined,
|
|
156
156
|
bot: {
|
|
157
157
|
avatar: session.bot.user?.avatar,
|
|
158
158
|
name: session.bot.user?.name,
|
|
@@ -189,7 +189,7 @@ export class MessageHandler {
|
|
|
189
189
|
timestamp: timestamp,
|
|
190
190
|
channelId: session.event?.channel?.id || session.channelId,
|
|
191
191
|
selfId: session.selfId,
|
|
192
|
-
elements: session.event?.message?.elements,
|
|
192
|
+
elements: this.utils.cleanBase64Content(session.event?.message?.elements),
|
|
193
193
|
type: 'bot',
|
|
194
194
|
guildId: session.event?.guild?.id || session.guildId,
|
|
195
195
|
guildName: guildName,
|
|
@@ -212,7 +212,7 @@ export class MessageHandler {
|
|
|
212
212
|
guildId: session.event?.guild?.id || session.guildId,
|
|
213
213
|
guildName: guildName,
|
|
214
214
|
channelType: session.event?.channel?.type || session.type || 0,
|
|
215
|
-
elements: session.event?.message?.elements,
|
|
215
|
+
elements: this.utils.cleanBase64Content(session.event?.message?.elements),
|
|
216
216
|
bot: {
|
|
217
217
|
avatar: session.bot.user?.avatar,
|
|
218
218
|
name: session.bot.user?.name,
|
package/src/utils.ts
CHANGED
|
@@ -40,4 +40,61 @@ export class Utils {
|
|
|
40
40
|
}
|
|
41
41
|
return text
|
|
42
42
|
}
|
|
43
|
+
|
|
44
|
+
// 检查字符串是否为base64格式
|
|
45
|
+
private isBase64(str: string): boolean {
|
|
46
|
+
if (!str || typeof str !== 'string') return false
|
|
47
|
+
|
|
48
|
+
// 检查是否以data:开头的base64格式
|
|
49
|
+
if (str.startsWith('data:')) {
|
|
50
|
+
return str.includes('base64,')
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// 检查纯base64字符串(长度大于100且符合base64格式)
|
|
54
|
+
if (str.length > 100) {
|
|
55
|
+
const base64Regex = /^[A-Za-z0-9+/]*={0,2}$/
|
|
56
|
+
return base64Regex.test(str)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return false
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// 清理对象中的base64内容
|
|
63
|
+
cleanBase64Content(obj: any): any {
|
|
64
|
+
if (obj === null || obj === undefined) {
|
|
65
|
+
return obj
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (typeof obj === 'string') {
|
|
69
|
+
if (this.isBase64(obj)) {
|
|
70
|
+
return '暂不支持记录base64内容'
|
|
71
|
+
}
|
|
72
|
+
return obj
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (Array.isArray(obj)) {
|
|
76
|
+
return obj.map(item => this.cleanBase64Content(item))
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (typeof obj === 'object') {
|
|
80
|
+
const cleaned: any = {}
|
|
81
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
82
|
+
// 特别处理常见的base64字段
|
|
83
|
+
if (typeof value === 'string' && (
|
|
84
|
+
key === 'src' ||
|
|
85
|
+
key === 'url' ||
|
|
86
|
+
key === 'file' ||
|
|
87
|
+
key === 'data' ||
|
|
88
|
+
key === 'content'
|
|
89
|
+
) && this.isBase64(value)) {
|
|
90
|
+
cleaned[key] = '暂不支持记录base64内容'
|
|
91
|
+
} else {
|
|
92
|
+
cleaned[key] = this.cleanBase64Content(value)
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return cleaned
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return obj
|
|
99
|
+
}
|
|
43
100
|
}
|