@azimiao/koishi-plugin-cafe-bot-exp 0.0.1 → 0.0.2
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/lib/DailySeededName.d.ts +1 -0
- package/lib/PseudoRandom.d.ts +11 -0
- package/lib/index.js +72 -165
- package/package.json +16 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function DailySeededName(uid: any): string;
|
package/lib/index.js
CHANGED
|
@@ -1679,126 +1679,7 @@ __export(src_exports, {
|
|
|
1679
1679
|
module.exports = __toCommonJS(src_exports);
|
|
1680
1680
|
var import_koishi2 = require("koishi");
|
|
1681
1681
|
|
|
1682
|
-
// src/
|
|
1683
|
-
function md5(str) {
|
|
1684
|
-
function rotateLeft(lValue, iShiftBits) {
|
|
1685
|
-
return lValue << iShiftBits | lValue >>> 32 - iShiftBits;
|
|
1686
|
-
}
|
|
1687
|
-
__name(rotateLeft, "rotateLeft");
|
|
1688
|
-
function addUnsigned(lX, lY) {
|
|
1689
|
-
const lX4 = lX & 1073741824;
|
|
1690
|
-
const lY4 = lY & 1073741824;
|
|
1691
|
-
const lX8 = lX & 2147483648;
|
|
1692
|
-
const lY8 = lY & 2147483648;
|
|
1693
|
-
const lResult = (lX & 1073741823) + (lY & 1073741823);
|
|
1694
|
-
if (lX4 & lY4) return lResult ^ 2147483648 ^ lX8 ^ lY8;
|
|
1695
|
-
if (lX4 | lY4) {
|
|
1696
|
-
if (lResult & 1073741824) return lResult ^ 3221225472 ^ lX8 ^ lY8;
|
|
1697
|
-
else return lResult ^ 1073741824 ^ lX8 ^ lY8;
|
|
1698
|
-
} else {
|
|
1699
|
-
return lResult ^ lX8 ^ lY8;
|
|
1700
|
-
}
|
|
1701
|
-
}
|
|
1702
|
-
__name(addUnsigned, "addUnsigned");
|
|
1703
|
-
function F(x2, y, z) {
|
|
1704
|
-
return x2 & y | ~x2 & z;
|
|
1705
|
-
}
|
|
1706
|
-
__name(F, "F");
|
|
1707
|
-
function G(x2, y, z) {
|
|
1708
|
-
return x2 & z | y & ~z;
|
|
1709
|
-
}
|
|
1710
|
-
__name(G, "G");
|
|
1711
|
-
function H(x2, y, z) {
|
|
1712
|
-
return x2 ^ y ^ z;
|
|
1713
|
-
}
|
|
1714
|
-
__name(H, "H");
|
|
1715
|
-
function I(x2, y, z) {
|
|
1716
|
-
return y ^ (x2 | ~z);
|
|
1717
|
-
}
|
|
1718
|
-
__name(I, "I");
|
|
1719
|
-
function FF(a2, b2, c2, d2, x2, s, ac) {
|
|
1720
|
-
a2 = addUnsigned(a2, addUnsigned(addUnsigned(F(b2, c2, d2), x2), ac));
|
|
1721
|
-
return addUnsigned(rotateLeft(a2, s), b2);
|
|
1722
|
-
}
|
|
1723
|
-
__name(FF, "FF");
|
|
1724
|
-
function GG(a2, b2, c2, d2, x2, s, ac) {
|
|
1725
|
-
a2 = addUnsigned(a2, addUnsigned(addUnsigned(G(b2, c2, d2), x2), ac));
|
|
1726
|
-
return addUnsigned(rotateLeft(a2, s), b2);
|
|
1727
|
-
}
|
|
1728
|
-
__name(GG, "GG");
|
|
1729
|
-
function HH(a2, b2, c2, d2, x2, s, ac) {
|
|
1730
|
-
a2 = addUnsigned(a2, addUnsigned(addUnsigned(H(b2, c2, d2), x2), ac));
|
|
1731
|
-
return addUnsigned(rotateLeft(a2, s), b2);
|
|
1732
|
-
}
|
|
1733
|
-
__name(HH, "HH");
|
|
1734
|
-
function II(a2, b2, c2, d2, x2, s, ac) {
|
|
1735
|
-
a2 = addUnsigned(a2, addUnsigned(addUnsigned(I(b2, c2, d2), x2), ac));
|
|
1736
|
-
return addUnsigned(rotateLeft(a2, s), b2);
|
|
1737
|
-
}
|
|
1738
|
-
__name(II, "II");
|
|
1739
|
-
function convertToWordArray(str2) {
|
|
1740
|
-
const lWordCount = ((str2.length + 8 >> 6) + 1) * 16;
|
|
1741
|
-
const lWordArray = Array(lWordCount - 1);
|
|
1742
|
-
let lBytePosition = 0;
|
|
1743
|
-
let lByteCount = 0;
|
|
1744
|
-
while (lByteCount < str2.length) {
|
|
1745
|
-
const lWordIndex2 = lByteCount >> 2;
|
|
1746
|
-
if (lWordArray[lWordIndex2] === void 0) lWordArray[lWordIndex2] = 0;
|
|
1747
|
-
lWordArray[lWordIndex2] |= (str2.charCodeAt(lByteCount) & 255) << lByteCount % 4 * 8;
|
|
1748
|
-
lByteCount++;
|
|
1749
|
-
}
|
|
1750
|
-
const lWordIndex = lByteCount >> 2;
|
|
1751
|
-
if (lWordArray[lWordIndex] === void 0) lWordArray[lWordIndex] = 0;
|
|
1752
|
-
lWordArray[lWordIndex] |= 128 << lByteCount % 4 * 8;
|
|
1753
|
-
lWordArray[lWordCount - 2] = str2.length << 3;
|
|
1754
|
-
lWordArray[lWordCount - 1] = str2.length >>> 29;
|
|
1755
|
-
return lWordArray;
|
|
1756
|
-
}
|
|
1757
|
-
__name(convertToWordArray, "convertToWordArray");
|
|
1758
|
-
function wordToHex(lValue) {
|
|
1759
|
-
let wordToHexValue = "", wordToHexValueTemp = "", lByte, lCount;
|
|
1760
|
-
for (lCount = 0; lCount <= 3; lCount++) {
|
|
1761
|
-
lByte = lValue >>> lCount * 8 & 255;
|
|
1762
|
-
wordToHexValueTemp = "0" + lByte.toString(16);
|
|
1763
|
-
wordToHexValue += wordToHexValueTemp.slice(-2);
|
|
1764
|
-
}
|
|
1765
|
-
return wordToHexValue;
|
|
1766
|
-
}
|
|
1767
|
-
__name(wordToHex, "wordToHex");
|
|
1768
|
-
const x = convertToWordArray(str);
|
|
1769
|
-
let a = 1732584193;
|
|
1770
|
-
let b = 4023233417;
|
|
1771
|
-
let c = 2562383102;
|
|
1772
|
-
let d = 271733878;
|
|
1773
|
-
for (let k = 0; k < x.length; k += 16) {
|
|
1774
|
-
const [AA, BB, CC, DD] = [a, b, c, d];
|
|
1775
|
-
a = FF(a, b, c, d, x[k + 0], 7, 3614090360);
|
|
1776
|
-
d = FF(d, a, b, c, x[k + 1], 12, 3905402710);
|
|
1777
|
-
c = FF(c, d, a, b, x[k + 2], 17, 606105819);
|
|
1778
|
-
b = FF(b, c, d, a, x[k + 3], 22, 3250441966);
|
|
1779
|
-
a = addUnsigned(a, AA);
|
|
1780
|
-
b = addUnsigned(b, BB);
|
|
1781
|
-
c = addUnsigned(c, CC);
|
|
1782
|
-
d = addUnsigned(d, DD);
|
|
1783
|
-
}
|
|
1784
|
-
return (wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d)).toLowerCase();
|
|
1785
|
-
}
|
|
1786
|
-
__name(md5, "md5");
|
|
1787
|
-
function hashToSeed(md5str) {
|
|
1788
|
-
let seed = 0;
|
|
1789
|
-
for (let i = 0; i < md5str.length; i++) {
|
|
1790
|
-
seed = seed * 31 + md5str.charCodeAt(i) >>> 0;
|
|
1791
|
-
}
|
|
1792
|
-
return seed;
|
|
1793
|
-
}
|
|
1794
|
-
__name(hashToSeed, "hashToSeed");
|
|
1795
|
-
function makeSeededRandom(seed) {
|
|
1796
|
-
return function() {
|
|
1797
|
-
seed = seed * 1664525 + 1013904223 >>> 0;
|
|
1798
|
-
return seed / 4294967295;
|
|
1799
|
-
};
|
|
1800
|
-
}
|
|
1801
|
-
__name(makeSeededRandom, "makeSeededRandom");
|
|
1682
|
+
// src/DailySeededName.ts
|
|
1802
1683
|
function DailySeededName(uid) {
|
|
1803
1684
|
const now = /* @__PURE__ */ new Date();
|
|
1804
1685
|
const utc = now.getTime() + now.getTimezoneOffset() * 6e4;
|
|
@@ -1808,17 +1689,48 @@ function DailySeededName(uid) {
|
|
|
1808
1689
|
return fullStr;
|
|
1809
1690
|
}
|
|
1810
1691
|
__name(DailySeededName, "DailySeededName");
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
return
|
|
1692
|
+
|
|
1693
|
+
// src/PseudoRandom.ts
|
|
1694
|
+
function stringToSeed(str) {
|
|
1695
|
+
let hash = 2166136261;
|
|
1696
|
+
for (let i = 0; i < str.length; i++) {
|
|
1697
|
+
hash ^= str.charCodeAt(i);
|
|
1698
|
+
hash = Math.imul(hash, 16777619);
|
|
1699
|
+
}
|
|
1700
|
+
return hash >>> 0;
|
|
1701
|
+
}
|
|
1702
|
+
__name(stringToSeed, "stringToSeed");
|
|
1703
|
+
function mulberry32(a) {
|
|
1704
|
+
return function() {
|
|
1705
|
+
a |= 0;
|
|
1706
|
+
a = a + 1831565813 | 0;
|
|
1707
|
+
let t = Math.imul(a ^ a >>> 15, 1 | a);
|
|
1708
|
+
t ^= t + Math.imul(t ^ t >>> 7, 61 | t);
|
|
1709
|
+
return ((t ^ t >>> 14) >>> 0) / 4294967296;
|
|
1710
|
+
};
|
|
1820
1711
|
}
|
|
1821
|
-
__name(
|
|
1712
|
+
__name(mulberry32, "mulberry32");
|
|
1713
|
+
var PseudoRandom = class {
|
|
1714
|
+
static {
|
|
1715
|
+
__name(this, "PseudoRandom");
|
|
1716
|
+
}
|
|
1717
|
+
seed;
|
|
1718
|
+
randFunc;
|
|
1719
|
+
constructor(seedStr) {
|
|
1720
|
+
this.seed = stringToSeed(seedStr);
|
|
1721
|
+
if (this.seed === 0) {
|
|
1722
|
+
this.seed = 123456789;
|
|
1723
|
+
}
|
|
1724
|
+
this.randFunc = mulberry32(this.seed);
|
|
1725
|
+
}
|
|
1726
|
+
next = /* @__PURE__ */ __name(() => {
|
|
1727
|
+
return this.randFunc();
|
|
1728
|
+
}, "next");
|
|
1729
|
+
nextInt = /* @__PURE__ */ __name((min, max) => {
|
|
1730
|
+
return Math.floor(this.next() * (max - min + 1)) + min;
|
|
1731
|
+
}, "nextInt");
|
|
1732
|
+
};
|
|
1733
|
+
var PseudoRandom_default = PseudoRandom;
|
|
1822
1734
|
|
|
1823
1735
|
// src/templete/html.ts
|
|
1824
1736
|
function HtmlCreator(cardList) {
|
|
@@ -2040,33 +1952,14 @@ function shuffleWithCustomRandom(array, rand) {
|
|
|
2040
1952
|
return array;
|
|
2041
1953
|
}
|
|
2042
1954
|
__name(shuffleWithCustomRandom, "shuffleWithCustomRandom");
|
|
2043
|
-
function getLerpValue(start, end, percent) {
|
|
2044
|
-
var a = end - start;
|
|
2045
|
-
var b = percent * a;
|
|
2046
|
-
var c = start + b;
|
|
2047
|
-
return c;
|
|
2048
|
-
}
|
|
2049
|
-
__name(getLerpValue, "getLerpValue");
|
|
2050
|
-
function getLerpIntValue(start, end, percent) {
|
|
2051
|
-
var a = getLerpValue(start, end, percent);
|
|
2052
|
-
a = Math.floor(a + 0.5);
|
|
2053
|
-
if (a > start && a > end) {
|
|
2054
|
-
a = start > end ? start : end;
|
|
2055
|
-
}
|
|
2056
|
-
if (a < start && a < end) {
|
|
2057
|
-
a = start < end ? start : end;
|
|
2058
|
-
}
|
|
2059
|
-
return a;
|
|
2060
|
-
}
|
|
2061
|
-
__name(getLerpIntValue, "getLerpIntValue");
|
|
2062
1955
|
var star2Name = null;
|
|
2063
|
-
function getCards(
|
|
1956
|
+
function getCards(seed, config) {
|
|
2064
1957
|
let minCount = config.MinCount;
|
|
2065
1958
|
let maxCount = config.MaxCount;
|
|
2066
|
-
let randomer =
|
|
2067
|
-
let drawTime =
|
|
1959
|
+
let randomer = new PseudoRandom_default(seed);
|
|
1960
|
+
let drawTime = randomer.nextInt(minCount, maxCount);
|
|
2068
1961
|
let cardDataCache = [...cardData];
|
|
2069
|
-
let cardDataRandom = shuffleWithCustomRandom(cardDataCache, randomer);
|
|
1962
|
+
let cardDataRandom = shuffleWithCustomRandom(cardDataCache, randomer.next);
|
|
2070
1963
|
const allChanges = [
|
|
2071
1964
|
config.Star5Chance,
|
|
2072
1965
|
config.Star4Chance,
|
|
@@ -2093,7 +1986,7 @@ function getCards(userId, config) {
|
|
|
2093
1986
|
});
|
|
2094
1987
|
let result = [];
|
|
2095
1988
|
for (let i = 0; i < drawTime; i++) {
|
|
2096
|
-
let randomNumber = randomer();
|
|
1989
|
+
let randomNumber = randomer.next();
|
|
2097
1990
|
let selectStarGroup = -999;
|
|
2098
1991
|
for (let starGroup = 0; starGroup < allChanges.length; starGroup++) {
|
|
2099
1992
|
if (randomNumber < allChanges[starGroup]) {
|
|
@@ -2103,8 +1996,7 @@ function getCards(userId, config) {
|
|
|
2103
1996
|
}
|
|
2104
1997
|
if (selectStarGroup > 0 && groupedByStar != null && groupedByStar[selectStarGroup]) {
|
|
2105
1998
|
let nowGroupData = groupedByStar[selectStarGroup];
|
|
2106
|
-
let pickUpNumber = randomer();
|
|
2107
|
-
pickUpNumber = getLerpIntValue(0, nowGroupData.length - 1, pickUpNumber);
|
|
1999
|
+
let pickUpNumber = randomer.nextInt(0, nowGroupData.length - 1);
|
|
2108
2000
|
let card = nowGroupData[pickUpNumber];
|
|
2109
2001
|
card.starText = star2Name[card.star];
|
|
2110
2002
|
if (!result.includes(card)) {
|
|
@@ -2125,9 +2017,11 @@ function apply(ctx, config) {
|
|
|
2125
2017
|
argv.session?.send(`我是轨迹Cafe群聊机器人概念版~`);
|
|
2126
2018
|
});
|
|
2127
2019
|
ctx.command("轨迹抽卡/给我抽", "进行每日抽卡").action(async (argv, _) => {
|
|
2128
|
-
let
|
|
2020
|
+
let seed = DailySeededName(argv.session.userId);
|
|
2021
|
+
let randomer = new PseudoRandom_default(seed);
|
|
2022
|
+
let result = getCards(seed, config);
|
|
2129
2023
|
if (result.length <= 0) {
|
|
2130
|
-
let msg2 = "你并不是本群限定非酋, 只不过抽到的卡牌被" +
|
|
2024
|
+
let msg2 = "你并不是本群限定非酋, 只不过抽到的卡牌被" + animals[randomer.nextInt(0, animals.length - 1)] + "叼走了~\n";
|
|
2131
2025
|
argv.session?.send(`${At(argv)}${msg2}`);
|
|
2132
2026
|
return;
|
|
2133
2027
|
}
|
|
@@ -2153,28 +2047,41 @@ function apply(ctx, config) {
|
|
|
2153
2047
|
argv.session?.send(msg);
|
|
2154
2048
|
return;
|
|
2155
2049
|
});
|
|
2050
|
+
const requestWebCache = {};
|
|
2156
2051
|
ctx.command("轨迹抽卡/给我抽图", "进行抽卡并显示卡牌图片").action(async (argv, _) => {
|
|
2157
|
-
let
|
|
2052
|
+
let seed = DailySeededName(argv.session.userId);
|
|
2053
|
+
let randomer = new PseudoRandom_default(seed);
|
|
2054
|
+
let result = getCards(seed, config);
|
|
2158
2055
|
if (result.length <= 0) {
|
|
2159
|
-
let msg = "你并不是本群限定非酋, 只不过抽到的卡牌被" +
|
|
2056
|
+
let msg = "你并不是本群限定非酋, 只不过抽到的卡牌被" + animals[randomer.nextInt(0, animals.length - 1)] + "叼走了~\n";
|
|
2160
2057
|
argv.session?.send(`${At(argv)} ${msg}`);
|
|
2161
2058
|
return;
|
|
2162
2059
|
}
|
|
2060
|
+
if (requestWebCache[seed]) {
|
|
2061
|
+
argv.session?.send(`${At(argv)} 请等待上次抽取完成哦~`);
|
|
2062
|
+
return;
|
|
2063
|
+
}
|
|
2064
|
+
requestWebCache[seed] = "waiting";
|
|
2065
|
+
await argv.session?.sendQueued(`${At(argv)} 抽取中,请稍候`);
|
|
2163
2066
|
var a = html_default(result);
|
|
2164
2067
|
await ctx.http.post(
|
|
2165
2068
|
config.ImageServer,
|
|
2166
2069
|
{
|
|
2167
2070
|
html: a,
|
|
2168
2071
|
auth: config.ImageServerAuth,
|
|
2169
|
-
filename:
|
|
2072
|
+
filename: seed
|
|
2170
2073
|
},
|
|
2171
2074
|
{
|
|
2172
2075
|
responseType: "json"
|
|
2173
2076
|
}
|
|
2174
|
-
).then((res) => {
|
|
2175
|
-
|
|
2176
|
-
|
|
2177
|
-
argv.session?.
|
|
2077
|
+
).then(async (res) => {
|
|
2078
|
+
delete requestWebCache[seed];
|
|
2079
|
+
await argv.session?.sendQueued(`${At(argv)}<img src="${res.data}"/>`);
|
|
2080
|
+
await argv.session?.cancelQueued();
|
|
2081
|
+
}).catch(async (e) => {
|
|
2082
|
+
delete requestWebCache[seed];
|
|
2083
|
+
await argv.session?.sendQueued(`${At(argv)}图片生成失败`);
|
|
2084
|
+
await argv.session?.cancelQueued();
|
|
2178
2085
|
});
|
|
2179
2086
|
return;
|
|
2180
2087
|
});
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@azimiao/koishi-plugin-cafe-bot-exp",
|
|
3
3
|
"description": "cafe bot experiment",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.2",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"typings": "lib/index.d.ts",
|
|
7
7
|
"files": [
|
|
@@ -16,5 +16,19 @@
|
|
|
16
16
|
],
|
|
17
17
|
"peerDependencies": {
|
|
18
18
|
"koishi": "^4.18.7"
|
|
19
|
+
},
|
|
20
|
+
"koishi": {
|
|
21
|
+
"description": {
|
|
22
|
+
"zh": "轨迹Cafe概念版"
|
|
23
|
+
},
|
|
24
|
+
"service": {
|
|
25
|
+
"required": [
|
|
26
|
+
"http"
|
|
27
|
+
]
|
|
28
|
+
},
|
|
29
|
+
"locales": [
|
|
30
|
+
"zh"
|
|
31
|
+
],
|
|
32
|
+
"preview": true
|
|
19
33
|
}
|
|
20
|
-
}
|
|
34
|
+
}
|