Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat:小阿卡纳塔罗牌 #346

Merged
merged 77 commits into from
Jul 29, 2022
Merged
Show file tree
Hide file tree
Changes from 76 commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
0a4d870
优化在两个命令中使用空格分隔的体验
shudorcl Jan 27, 2022
3eee43e
优化四个插件中使用空格分隔的体验
shudorcl Jan 28, 2022
9c6943d
优化并修正了上一个commit
shudorcl Jan 28, 2022
3e3b8f1
- 删去了遗漏的Trim
shudorcl Jan 28, 2022
ed1d66f
Merge branch 'FloatTech:master' into master
shudorcl Feb 3, 2022
6667402
优化了更多插件中使用空格的体验
shudorcl Feb 3, 2022
45b112b
Merge branch 'FloatTech:master' into master
shudorcl Feb 7, 2022
0a065ff
Merge branch 'FloatTech:master' into master
shudorcl Feb 16, 2022
68cde8e
Merge branch 'FloatTech:master' into master
shudorcl Mar 4, 2022
a55ebda
Merge branch 'FloatTech:master' into master
shudorcl Mar 21, 2022
7f76e40
Merge branch 'FloatTech:master' into master
shudorcl Mar 31, 2022
ea3d521
Merge branch 'FloatTech:master' into master
shudorcl Mar 31, 2022
fcee9ae
Merge branch 'FloatTech:master' into master
shudorcl Apr 5, 2022
f378d3f
Merge branch 'FloatTech:master' into master
shudorcl Apr 11, 2022
e3fb21d
Merge branch 'FloatTech:master' into master
shudorcl Apr 20, 2022
e29288f
Merge branch 'FloatTech:master' into master
shudorcl Apr 21, 2022
63c6395
Merge branch 'FloatTech:master' into master
shudorcl Apr 27, 2022
2d203f0
Merge branch 'FloatTech:master' into master
shudorcl Apr 29, 2022
2b47e61
Merge branch 'FloatTech:master' into master
shudorcl May 1, 2022
9a7fdfd
- 调整funny
shudorcl May 1, 2022
9bb1d34
- 简化funny说明
shudorcl May 1, 2022
1c175f2
Merge branch 'FloatTech:master' into master
shudorcl May 3, 2022
cc5f950
Merge branch 'FloatTech:master' into master
shudorcl May 5, 2022
c1adf22
Merge branch 'FloatTech:master' into master
shudorcl May 5, 2022
6f1a266
Merge branch 'FloatTech:master' into master
shudorcl May 7, 2022
3cf4b7d
Merge branch 'FloatTech:master' into master
shudorcl May 7, 2022
9d5a19d
- 用暴力的办法使抽多张塔罗牌不重复
shudorcl May 7, 2022
40fad7e
- 解塔罗牌
shudorcl May 7, 2022
5c12f35
- 修改readme
shudorcl May 7, 2022
3c8df7b
大幅减少全局变量,简化抽塔罗牌输出
shudorcl May 8, 2022
e09ca34
Merge branch 'FloatTech:master' into master
shudorcl May 8, 2022
2f80b58
Merge branch 'FloatTech:master' into master
shudorcl May 9, 2022
2f16d0f
Merge branch 'FloatTech:master' into master
shudorcl May 9, 2022
64940d5
Merge branch 'FloatTech:master' into master
shudorcl May 12, 2022
5c6e82d
Merge branch 'FloatTech:master' into master
shudorcl May 13, 2022
e128e8b
Merge branch 'FloatTech:master' into master
shudorcl May 16, 2022
0f8be56
Merge branch 'FloatTech:master' into master
shudorcl May 20, 2022
cbab311
Merge branch 'FloatTech:master' into master
shudorcl May 24, 2022
4ff6c77
Merge branch 'FloatTech:master' into master
shudorcl May 27, 2022
8bc8b6b
Merge branch 'FloatTech:master' into master
shudorcl Jun 17, 2022
d5544ae
- 更新了塔罗牌阵
shudorcl Jun 17, 2022
6707f53
Merge branch 'master' of github.com:shudorcl/ZeroBot-Plugin
shudorcl Jun 17, 2022
6ea9a1c
- 顺lint心意
shudorcl Jun 17, 2022
5a04fe8
调整塔罗牌阵消息
shudorcl Jun 17, 2022
74be5e0
调整DoOnceOnSuccess,减少冗余
shudorcl Jun 18, 2022
5732740
🎨 改进代码样式
github-actions[bot] Jun 18, 2022
01ab8a6
调整发送牌阵信息
shudorcl Jun 18, 2022
78077b9
调整变量名
shudorcl Jun 18, 2022
ff65622
🎨 改进代码样式
github-actions[bot] Jun 18, 2022
d100a11
改回base64
shudorcl Jun 18, 2022
7cf5614
Merge branch 'FloatTech:master' into master
shudorcl Jun 25, 2022
428799f
Merge branch 'FloatTech:master' into master
shudorcl Jul 12, 2022
3163412
🎨 改进代码样式
github-actions[bot] Jul 12, 2022
3c9557d
Merge branch 'FloatTech:master' into master
shudorcl Jul 17, 2022
872e774
Merge branch 'master' of https://github.com/FloatTech/ZeroBot-Plugin …
shudorcl Jul 23, 2022
2d3ecd2
🎨 改进代码样式
github-actions[bot] Jul 23, 2022
1b18d24
Merge
shudorcl Jul 23, 2022
f02a4ef
Merge branch 'master' of github.com:shudorcl/ZeroBot-Plugin
shudorcl Jul 23, 2022
719c531
Merge
shudorcl Jul 23, 2022
41dd551
Merge branch 'FloatTech:master' into master
shudorcl Jul 25, 2022
c5158fb
feat:抽取小阿卡纳
shudorcl Jul 27, 2022
11bdace
- 修改合并转发的URL
shudorcl Jul 27, 2022
4fc049f
🎨 改进代码样式
github-actions[bot] Jul 27, 2022
f01610b
🎨 改进代码样式
github-actions[bot] Jul 23, 2022
09a756e
修复猜歌已知问题 (#340)
fangliuyu Jul 24, 2022
e246569
Feature nihongo (#339)
guohuiyuan Jul 24, 2022
cb86018
feat:抽取小阿卡纳
shudorcl Jul 27, 2022
2e669f1
- 修改合并转发的URL
shudorcl Jul 27, 2022
743d5d8
🎨 改进代码样式
github-actions[bot] Jul 27, 2022
4e242a0
Merge branch 'master' of github.com:shudorcl/ZeroBot-Plugin
shudorcl Jul 27, 2022
9886562
改回检查更新
shudorcl Jul 27, 2022
230547c
小阿卡纳牌阵
shudorcl Jul 28, 2022
681f2b8
调整card2msg排版
shudorcl Jul 28, 2022
1e322cf
调整card2img排版
shudorcl Jul 28, 2022
307540f
Update README.md
fumiama Jul 29, 2022
2ae0fef
Update README.md
fumiama Jul 29, 2022
3149901
Merge branch 'master' into master
fumiama Jul 29, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -917,10 +917,10 @@ print("run[CQ:image,file="+j["img"]+"]")

`import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/tarot"`

- [x] 抽塔罗牌
- [x] 抽n张塔罗牌
- [x] 抽[塔罗牌|大阿卡纳|小阿卡纳]
- [x] 抽n张[塔罗牌|大阿卡纳|小阿卡纳]
- [x] 解塔罗牌[牌名]
- [x] 塔罗牌阵[圣三角|时间之流|四要素|五牌阵|吉普赛十字|马蹄|六芒星]"
- [x] [塔罗|大阿卡纳|小阿卡纳|混合]牌阵[圣三角|时间之流|四要素|五牌阵|吉普赛十字|马蹄|六芒星]

</details>
<details>
Expand Down
8 changes: 4 additions & 4 deletions plugin/bilibili/card2msg.go
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ func dynamicCard2msg(str string, cType int) (msg []message.MessageSegment, err e
msg = append(msg, message.Text(dynamicCard.Desc.UserProfile.Info.Uname, typeMsg[cType], "\n"))
}
msg = append(msg, message.Image(card.LivePlayInfo.Cover))
msg = append(msg, message.Text(card.LivePlayInfo.Title, "\n",
msg = append(msg, message.Text("\n", card.LivePlayInfo.Title, "\n",
"房间号: ", card.LivePlayInfo.RoomID, "\n",
"分区: ", card.LivePlayInfo.ParentAreaName))
if card.LivePlayInfo.ParentAreaName != card.LivePlayInfo.AreaName {
Expand Down Expand Up @@ -174,7 +174,7 @@ func articleCard2msg(card Card, defaultID string) (msg []message.MessageSegment)
for i := 0; i < len(card.OriginImageUrls); i++ {
msg = append(msg, message.Image(card.OriginImageUrls[i]))
}
msg = append(msg, message.Text(card.Title, "\n", "UP主: ", card.AuthorName, "\n",
msg = append(msg, message.Text("\n", card.Title, "\n", "UP主: ", card.AuthorName, "\n",
"阅读: ", humanNum(card.Stats.View), " 评论: ", humanNum(card.Stats.Reply), "\n",
cvURL, defaultID))
return
Expand All @@ -184,7 +184,7 @@ func articleCard2msg(card Card, defaultID string) (msg []message.MessageSegment)
func liveCard2msg(card roomCard) (msg []message.MessageSegment) {
msg = make([]message.MessageSegment, 0, 16)
msg = append(msg, message.Image(card.RoomInfo.Keyframe))
msg = append(msg, message.Text(card.RoomInfo.Title, "\n",
msg = append(msg, message.Text("\n", card.RoomInfo.Title, "\n",
"主播: ", card.AnchorInfo.BaseInfo.Uname, "\n",
"房间号: ", card.RoomInfo.RoomID, "\n"))
if card.RoomInfo.ShortID != 0 {
Expand Down Expand Up @@ -226,7 +226,7 @@ func videoCard2msg(card Card) (msg []message.MessageSegment, err error) {
}
msg = append(msg, message.Text("播放: ", humanNum(card.Stat.View), " 弹幕: ", humanNum(card.Stat.Danmaku)))
msg = append(msg, message.Image(card.Pic))
msg = append(msg, message.Text("点赞: ", humanNum(card.Stat.Like), " 投币: ", humanNum(card.Stat.Coin), "\n",
msg = append(msg, message.Text("\n点赞: ", humanNum(card.Stat.Like), " 投币: ", humanNum(card.Stat.Coin), "\n",
"收藏: ", humanNum(card.Stat.Favorite), " 分享: ", humanNum(card.Stat.Share), "\n",
vURL, card.BvID))
return
Expand Down
2 changes: 1 addition & 1 deletion plugin/char_reverser/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ func init() {
var reversedStrBuilder strings.Builder
for _, char := range tempBuilder.String() {
if char != ' ' {
reversedStrBuilder.WriteRune(charMap[char])
reversedStrBuilder.WriteRune(charMap[char])
} else {
reversedStrBuilder.WriteRune(' ')
}
Expand Down
14 changes: 14 additions & 0 deletions plugin/tarot/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# ZeroBot-Plugin-Tarot

[ZeroBot QQ机器人](https://github.com/wdvxdr1123/ZeroBot)插件,玄学占卜抽塔罗牌!

## 触发方式

- [x] 抽[塔罗牌|大阿卡纳|小阿卡纳]
- [x] 抽n张[塔罗牌|大阿卡纳|小阿卡纳]
- [x] 解塔罗牌[牌名]
- [x] [塔罗|大阿卡纳|小阿卡纳|混合]牌阵[圣三角|时间之流|四要素|五牌阵|吉普赛十字|马蹄|六芒星]

## 致谢

解牌来自[MinatoAquaCrews/nonebot_plugin_tarot](https://github.com/MinatoAquaCrews/nonebot_plugin_tarot),感谢[KafCoppelia](https://github.com/KafCoppelia)的收集与整理!
68 changes: 43 additions & 25 deletions plugin/tarot/tarot.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,21 +37,21 @@ type formation struct {
}
type cardSet = map[string]card

var cardMap = make(cardSet, 30)
var infoMap = make(map[string]cardInfo, 30)
var cardMap = make(cardSet, 80)
var infoMap = make(map[string]cardInfo, 80)
var formationMap = make(map[string]formation, 10)

// var cardName = make([]string, 30)
// var formationName = make([]string, 10)
var formationName = make([]string, 10)

func init() {
engine := control.Register("tarot", &ctrl.Options[*zero.Ctx]{
DisableOnDefault: false,
Help: "塔罗牌\n" +
"- 抽塔罗牌\n" +
"- 抽n张塔罗牌\n" +
"- 抽[塔罗牌|大阿卡纳|小阿卡纳]\n" +
"- 抽n张[塔罗牌|大阿卡纳|小阿卡纳]\n" +
"- 解塔罗牌[牌名]\n" +
"- 塔罗牌阵[圣三角|时间之流|四要素|五牌阵|吉普赛十字|马蹄|六芒星]",
"- [塔罗|大阿卡纳|小阿卡纳|混合]牌阵[圣三角|时间之流|四要素|五牌阵|吉普赛十字|马蹄|六芒星]",
PublicDataFolder: "Tarot",
}).ApplySingle(ctxext.DefaultSingle)

Expand All @@ -67,12 +67,11 @@ func init() {
return false
}
for _, card := range cardMap {
infoMapKey := strings.Split(card.Name, "(")[0]
infoMap[infoMapKey] = card.cardInfo
// 可以拿来显示大阿尔卡纳列表
// cardName = append(cardName, infoMapKey)
infoMap[card.Name] = card.cardInfo
// 可以拿来显示塔罗牌列表
// cardName = append(cardName, card.Name)
}
logrus.Infof("[tarot]读取%d张大阿尔卡纳塔罗牌", len(cardMap))
logrus.Infof("[tarot]读取%d张塔罗牌", len(cardMap))
formation, err := engine.GetLazyData("formation.json", true)
if err != nil {
ctx.SendChain(message.Text("ERROR:", err))
Expand All @@ -83,15 +82,21 @@ func init() {
ctx.SendChain(message.Text("ERROR:", err))
return false
}
for k := range formationMap {
formationName = append(formationName, k)
}
logrus.Infof("[tarot]读取%d组塔罗牌阵", len(formationMap))
return true
})
engine.OnRegex(`^抽(\d{1,2}张)?塔罗牌$`, getTarot).SetBlock(true).Limit(ctxext.LimitByGroup).Handle(func(ctx *zero.Ctx) {
engine.OnRegex(`^抽(\d{1,2}张)?((塔罗牌|大阿(尔)?卡纳)|小阿(尔)?卡纳)$`, getTarot).SetBlock(true).Limit(ctxext.LimitByGroup).Handle(func(ctx *zero.Ctx) {
match := ctx.State["regex_matched"].([]string)[1]
cardType := ctx.State["regex_matched"].([]string)[2]
n := 1
reasons := [...]string{"您抽到的是~\n", "锵锵锵,塔罗牌的预言是~\n", "诶,让我看看您抽到了~\n"}
position := [...]string{"正位", "逆位"}
reverse := [...]string{"", "Reverse"}
start := 0
length := 22
if match != "" {
var err error
n, err = strconv.Atoi(match[:len(match)-3])
Expand All @@ -112,34 +117,38 @@ func init() {
return
}
}
if strings.Contains(cardType, "小") {
start = 22
length = 55
}
if n == 1 {
i := rand.Intn(22)
i := rand.Intn(length) + start
p := rand.Intn(2)
card := cardMap[(strconv.Itoa(i))]
name := card.Name
if id := ctx.SendChain(
message.Text(reasons[rand.Intn(len(reasons))], position[p], " 的 ", name, "\n"),
message.Image(fmt.Sprintf(bed+"MajorArcana%s/%d.png", reverse[p], i))); id.ID() == 0 {
message.Image(fmt.Sprintf("%s/%s/%s", bed, reverse[p], card.ImgURL))); id.ID() == 0 {
ctx.SendChain(message.Text("ERROR:可能被风控了"))
}
return
}
msg := make([]message.MessageSegment, n)
randomIntMap := make(map[int]int, 30)
for i := range msg {
j := rand.Intn(22)
j := rand.Intn(length)
_, ok := randomIntMap[j]
for ok {
j = rand.Intn(22)
j = rand.Intn(length)
_, ok = randomIntMap[j]
}
randomIntMap[j] = 0
p := rand.Intn(2)
card := cardMap[(strconv.Itoa(j))]
card := cardMap[(strconv.Itoa(j + start))]
name := card.Name
tarotMsg := []message.MessageSegment{
message.Text(reasons[rand.Intn(len(reasons))], position[p], " 的 ", name, "\n"),
message.Image(fmt.Sprintf(bed+"MajorArcana%s/%d.png", reverse[p], j))}
message.Image(fmt.Sprintf("%s/%s/%s", bed, reverse[p], card.ImgURL))}
msg[i] = ctxext.FakeSenderForwardNode(ctx, tarotMsg...)
}
ctx.SendGroupForwardMessage(ctx.Event.GroupID, msg)
Expand All @@ -158,29 +167,38 @@ func init() {
ctx.SendChain(message.Text("没有找到", match, "噢~"))
}
})
engine.OnRegex(`^塔罗牌阵\s?(.*)`, getTarot).SetBlock(true).Limit(ctxext.LimitByGroup).Handle(func(ctx *zero.Ctx) {
match := ctx.State["regex_matched"].([]string)[1]
engine.OnRegex(`^((塔罗|大阿(尔)?卡纳)|小阿(尔)?卡纳|混合)牌阵\s?(.*)`, getTarot).SetBlock(true).Limit(ctxext.LimitByGroup).Handle(func(ctx *zero.Ctx) {
cardType := ctx.State["regex_matched"].([]string)[1]
match := ctx.State["regex_matched"].([]string)[5]
info, ok := formationMap[match]
position := [...]string{"正位", "逆位"}
reverse := [...]string{"", "Reverse"}
start, length := 0, 22
if strings.Contains(cardType, "小") {
start = 22
length = 55
} else if cardType == "混合" {
start = 0
length = 77
}
if ok {
var build strings.Builder
build.WriteString(ctx.CardOrNickName(ctx.Event.UserID))
build.WriteString("\n")
msg := make([]message.MessageSegment, info.CardsNum)
randomIntMap := make(map[int]int, 30)
for i := range msg {
j := rand.Intn(22)
j := rand.Intn(length)
_, ok := randomIntMap[j]
for ok {
j = rand.Intn(22)
j = rand.Intn(length)
_, ok = randomIntMap[j]
}
randomIntMap[j] = 0
p := rand.Intn(2)
card := cardMap[(strconv.Itoa(j))]
card := cardMap[(strconv.Itoa(j + start))]
name := card.Name
tarotMsg := []message.MessageSegment{message.Image(fmt.Sprintf(bed+"MajorArcana%s/%d.png", reverse[p], j))}
tarotMsg := []message.MessageSegment{message.Image(fmt.Sprintf("%s/%s/%s", bed, reverse[p], card.ImgURL))}
build.WriteString(info.Represent[0][i])
build.WriteString(": ")
build.WriteString(position[p])
Expand All @@ -199,7 +217,7 @@ func init() {
ctx.SendChain(message.Image("base64://" + binary.BytesToString(formation)))
ctx.SendGroupForwardMessage(ctx.Event.GroupID, msg)
} else {
ctx.SendChain(message.Text("没有找到", match, "噢~"))
ctx.SendChain(message.Text("没有找到", match, "噢~\n现有牌阵列表: ", strings.Join(formationName, " ")))
}
})
}