增加插件 reborn

This commit is contained in:
fumiama 2021-09-27 21:19:37 +08:00
parent b9e303196f
commit 52a8a9de6f
10 changed files with 1044 additions and 3 deletions

View File

@ -133,6 +133,9 @@
- [x] ?? [缩写]
- **选择困难症帮手** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_choose"`
- [x] 选择[选择项1]还是[选项2]还是[更多选项]
- **投胎** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_reborn"`
- [x] reborn
- 注:本插件来源于[tgbot](https://github.com/YukariChiba/tgbot/blob/main/modules/Reborn.py)
- **TODO...**
## 使用方法

906
data/Reborn/rate.json Normal file
View File

@ -0,0 +1,906 @@
[
{
"name": "印度",
"weight": 0.179369185
},
{
"weight": 0.116660088,
"name": "中华人民共和国"
},
{
"name": "尼日利亚",
"weight": 0.052104876
},
{
"weight": 0.04490831,
"name": "巴基斯坦"
},
{
"weight": 0.029767875,
"name": "印尼"
},
{
"weight": 0.02917347,
"name": "美国"
},
{
"name": "刚果民主共和国",
"weight": 0.026980482
},
{
"weight": 0.02653533,
"name": "埃塞俄比亚"
},
{
"name": "孟加拉国",
"weight": 0.022001723
},
{
"name": "巴西",
"weight": 0.020641351
},
{
"name": "埃及",
"weight": 0.019722924
},
{
"name": "菲律宾",
"weight": 0.017944256
},
{
"name": "墨西哥",
"weight": 0.015798468
},
{
"weight": 0.015156998,
"name": "坦桑尼亚"
},
{
"weight": 0.013686862,
"name": "乌干达"
},
{
"weight": 0.010405389,
"name": "俄罗斯"
},
{
"weight": 0.010217107,
"name": "苏丹"
},
{
"weight": 0.010079201,
"name": "越南"
},
{
"name": "阿富汗",
"weight": 0.009796745
},
{
"name": "伊朗",
"weight": 0.009789926
},
{
"name": "肯尼亚",
"weight": 0.009216044
},
{
"weight": 0.008870993,
"name": "安哥拉"
},
{
"name": "土耳其",
"weight": 0.008815318
},
{
"weight": 0.008267509,
"name": "莫桑比克"
},
{
"name": "南非",
"weight": 0.007826801
},
{
"weight": 0.00755071,
"name": "尼日尔"
},
{
"name": "伊拉克",
"weight": 0.007350484
},
{
"name": "喀麦隆",
"weight": 0.006786572
},
{
"weight": 0.006782117,
"name": "缅甸"
},
{
"name": "日本",
"weight": 0.006518972
},
{
"weight": 0.006384764,
"name": "加纳"
},
{
"weight": 0.006183538,
"name": "阿尔及利亚"
},
{
"weight": 0.006075416,
"name": "马里"
},
{
"name": "法国",
"weight": 0.00571344
},
{
"name": "英国",
"weight": 0.005662409
},
{
"name": "马达加斯加",
"weight": 0.00559132
},
{
"weight": 0.005562893,
"name": "也门"
},
{
"name": "哥伦比亚",
"weight": 0.005525953
},
{
"name": "布基纳法索",
"weight": 0.005378297
},
{
"name": "科特迪瓦",
"weight": 0.005352997
},
{
"name": "阿根廷",
"weight": 0.005171935
},
{
"name": "赞比亚",
"weight": 0.005147159
},
{
"name": "德国",
"weight": 0.005096501
},
{
"weight": 0.005067552,
"name": "泰国"
},
{
"name": "马拉维",
"weight": 0.005017242
},
{
"name": "乍得",
"weight": 0.004825619
},
{
"name": "摩洛哥",
"weight": 0.004571552
},
{
"weight": 0.004266592,
"name": "马来西亚"
},
{
"weight": 0.004130712,
"name": "南苏丹"
},
{
"name": "委内瑞拉",
"weight": 0.00410843
},
{
"weight": 0.003903682,
"name": "乌兹别克斯坦"
},
{
"weight": 0.003891083,
"name": "秘鲁"
},
{
"weight": 0.003854943,
"name": "尼泊尔"
},
{
"name": "沙特阿拉伯",
"weight": 0.003683713
},
{
"name": "塞内加尔",
"weight": 0.003671814
},
{
"name": "津巴布韦",
"weight": 0.003628572
},
{
"name": "意大利",
"weight": 0.003591173
},
{
"weight": 0.003564036,
"name": "贝宁"
},
{
"weight": 0.003318383,
"name": "索马里"
},
{
"name": "几内亚",
"weight": 0.003229938
},
{
"name": "韩国",
"weight": 0.00302709
},
{
"name": "危地马拉",
"weight": 0.002989448
},
{
"weight": 0.002933277,
"name": "西班牙"
},
{
"name": "布隆迪",
"weight": 0.002916273
},
{
"name": "乌克兰",
"weight": 0.002865519
},
{
"name": "叙利亚",
"weight": 0.002803866
},
{
"name": "加拿大",
"weight": 0.002769376
},
{
"name": "朝鲜",
"weight": 0.002663995
},
{
"name": "柬埔寨",
"weight": 0.002507218
},
{
"weight": 0.002459301,
"name": "卢旺达"
},
{
"weight": 0.002433661,
"name": "波兰"
},
{
"weight": 0.002264484,
"name": "澳大利亚"
},
{
"name": "斯里兰卡",
"weight": 0.002205474
},
{
"weight": 0.00217928,
"name": "哈萨克斯坦"
},
{
"name": "厄瓜多尔",
"weight": 0.002114416
},
{
"name": "塞拉利昂",
"weight": 0.002042686
},
{
"name": "海地",
"weight": 0.001815248
},
{
"name": "智利",
"weight": 0.001761297
},
{
"name": "多哥",
"weight": 0.001756614
},
{
"name": "约旦",
"weight": 0.001738363
},
{
"weight": 0.001716995,
"name": "玻利维亚"
},
{
"weight": 0.001432103,
"name": "巴布亚新几内亚"
},
{
"weight": 0.001424043,
"name": "塔吉克斯坦"
},
{
"name": "多米尼加",
"weight": 0.001376899
},
{
"name": "荷兰",
"weight": 0.001365722
},
{
"name": "罗马尼亚",
"weight": 0.001342703
},
{
"weight": 0.001340039,
"name": "台湾"
},
{
"name": "突尼斯",
"weight": 0.001327688
},
{
"name": "中非",
"weight": 0.001269639
},
{
"name": "洪都拉斯",
"weight": 0.001219191
},
{
"name": "刚果共和国",
"weight": 0.001209073
},
{
"weight": 0.001189154,
"name": "利比里亚"
},
{
"weight": 0.001150376,
"name": "以色列"
},
{
"weight": 0.001149654,
"name": "厄立特里亚"
},
{
"weight": 0.001119049,
"name": "老挝"
},
{
"name": "阿塞拜疆",
"weight": 0.001039837
},
{
"name": "利比亚",
"weight": 0.001029222
},
{
"name": "巴勒斯坦",
"weight": 0.000992651
},
{
"name": "吉尔吉斯斯坦",
"weight": 0.000957294
},
{
"weight": 0.000907425,
"name": "比利时"
},
{
"name": "瑞典",
"weight": 0.000890654
},
{
"name": "巴拉圭",
"weight": 0.00085764
},
{
"name": "毛里塔尼亚",
"weight": 0.000842302
},
{
"weight": 0.000830493,
"name": "古巴"
},
{
"name": "萨尔瓦多",
"weight": 0.000822881
},
{
"name": "尼加拉瓜",
"weight": 0.000782782
},
{
"weight": 0.000764766,
"name": "阿曼"
},
{
"name": "黎巴嫩",
"weight": 0.000751395
},
{
"name": "土库曼斯坦",
"weight": 0.000743841
},
{
"weight": 0.000680867,
"name": "阿联酋"
},
{
"weight": 0.000677997,
"name": "捷克"
},
{
"weight": 0.000643037,
"name": "白俄罗斯"
},
{
"weight": 0.000642255,
"name": "瑞士"
},
{
"name": "匈牙利",
"weight": 0.000612393
},
{
"name": "奥地利",
"weight": 0.000602473
},
{
"name": "希腊",
"weight": 0.000595922
},
{
"weight": 0.000592992,
"name": "葡萄牙"
},
{
"weight": 0.000566764,
"name": "科威特"
},
{
"weight": 0.000538867,
"name": "哥斯达黎加"
},
{
"name": "巴拿马",
"weight": 0.000513904
},
{
"name": "挪威",
"weight": 0.000466485
},
{
"name": "丹麦",
"weight": 0.000460789
},
{
"name": "爱尔兰",
"weight": 0.000455762
},
{
"name": "新西兰",
"weight": 0.000451486
},
{
"name": "纳米比亚",
"weight": 0.000450165
},
{
"name": "香港",
"weight": 0.000448826
},
{
"weight": 0.000441931,
"name": "冈比亚"
},
{
"weight": 0.000436542,
"name": "塞尔维亚"
},
{
"name": "芬兰",
"weight": 0.000417327
},
{
"weight": 0.00041658,
"name": "几内亚比绍"
},
{
"weight": 0.000410456,
"name": "保加利亚"
},
{
"weight": 0.000382945,
"name": "蒙古"
},
{
"name": "莱索托",
"weight": 0.00037228
},
{
"weight": 0.000361607,
"name": "新加坡"
},
{
"name": "斯洛伐克",
"weight": 0.000361482
},
{
"weight": 0.00035722,
"name": "加蓬"
},
{
"name": "博茨瓦纳",
"weight": 0.000348221
},
{
"weight": 0.000323338,
"name": "乌拉圭"
},
{
"name": "赤道几内亚",
"weight": 0.000318155
},
{
"name": "东帝汶",
"weight": 0.000316195
},
{
"name": "牙买加",
"weight": 0.000312724
},
{
"name": "格鲁吉亚",
"weight": 0.000307685
},
{
"weight": 0.000265076,
"name": "阿尔巴尼亚"
},
{
"weight": 0.000252622,
"name": "克罗地亚"
},
{
"weight": 0.000250708,
"name": "亚美尼亚"
},
{
"name": "波黑",
"weight": 0.000232069
},
{
"name": "摩尔多瓦",
"weight": 0.000204405
},
{
"name": "科索沃",
"weight": 0.000196993
},
{
"weight": 0.000189047,
"name": "立陶宛"
},
{
"weight": 0.000182006,
"name": "卡塔尔"
},
{
"name": "波多黎各",
"weight": 0.000182004
},
{
"name": "吉布提",
"weight": 0.000174383
},
{
"name": "北马其顿",
"weight": 0.000158321
},
{
"weight": 0.000146886,
"name": "科摩罗"
},
{
"weight": 0.000144027,
"name": "巴林"
},
{
"weight": 0.000129782,
"name": "斯洛文尼亚"
},
{
"weight": 0.000126232,
"name": "西撒哈拉"
},
{
"name": "拉脱维亚",
"weight": 0.000124966
},
{
"name": "所罗门群岛",
"weight": 0.000120169
},
{
"name": "斐济",
"weight": 0.000110985
},
{
"weight": 0.000110769,
"name": "特立尼达和多巴哥"
},
{
"weight": 0.000109656,
"name": "毛里求斯"
},
{
"weight": 8.8e-5,
"name": "爱沙尼亚"
},
{
"weight": 8.61e-5,
"name": "圭亚那"
},
{
"name": "不丹",
"weight": 8.61e-5
},
{
"weight": 7.49e-5,
"name": "佛得角"
},
{
"name": "塞浦路斯",
"weight": 6.8e-5
},
{
"name": "伯利兹",
"weight": 6.4e-5
},
{
"weight": 6.01e-5,
"name": "苏里南"
},
{
"name": "文莱",
"weight": 5.2e-5
},
{
"weight": 5.1e-5,
"name": "黑山"
},
{
"name": "瓦努阿图",
"weight": 5.1e-5
},
{
"name": "卢森堡",
"weight": 5.07e-5
},
{
"name": "马尔代夫",
"weight": 4.27e-5
},
{
"name": "巴哈马",
"weight": 4.06e-5
},
{
"weight": 3.82e-5,
"name": "澳门"
},
{
"weight": 3.48e-5,
"name": "马耳他"
},
{
"name": "冰岛",
"weight": 3.45e-5
},
{
"weight": 3.03e-5,
"name": "新喀里多尼亚"
},
{
"name": "萨摩亚",
"weight": 2.83e-5
},
{
"weight": 2.8e-5,
"name": "法属波利尼西亚"
},
{
"name": "关岛",
"weight": 2.36e-5
},
{
"weight": 2.32e-5,
"name": "巴巴多斯"
},
{
"name": "基里巴斯",
"weight": 1.83e-5
},
{
"weight": 1.71e-5,
"name": "圣卢西亚"
},
{
"name": "库拉索",
"weight": 1.51e-5
},
{
"weight": 1.5e-5,
"name": "汤加"
},
{
"weight": 1.42e-5,
"name": "密克罗尼西亚联邦"
},
{
"weight": 1.13e-5,
"name": "格林纳达"
},
{
"name": "安提瓜和巴布达",
"weight": 1.05e-5
},
{
"weight": 9.93e-6,
"name": "圣文森特和格林纳丁斯"
},
{
"name": "泽西",
"weight": 9.66e-6
},
{
"weight": 9.64e-6,
"name": "阿鲁巴"
},
{
"weight": 9.15e-6,
"name": "美属维尔京群岛"
},
{
"weight": 9.08e-6,
"name": "马绍尔群岛"
},
{
"weight": 8.9e-6,
"name": "塞舌尔"
},
{
"name": "美属萨摩亚",
"weight": 7.97e-6
},
{
"name": "多米尼克",
"weight": 7.57e-6
},
{
"weight": 6.41e-6,
"name": "马恩岛"
},
{
"weight": 6.09e-6,
"name": "北马里亚纳群岛"
},
{
"name": "开曼群岛",
"weight": 5.77e-6
},
{
"name": "格陵兰",
"weight": 5.63e-6
},
{
"weight": 5.54e-6,
"name": "法罗群岛"
},
{
"weight": 5.17e-6,
"name": "圣基茨和尼维斯"
},
{
"weight": 5.11e-6,
"name": "百慕大"
},
{
"weight": 4.38e-6,
"name": "根西"
},
{
"weight": 4.31e-6,
"name": "特克斯和凯科斯群岛"
},
{
"name": "荷属圣马丁",
"weight": 4.14e-6
},
{
"weight": 3.87e-6,
"name": "安道尔"
},
{
"name": "法国(法属圣马丁)",
"weight": 3.6e-6
},
{
"name": "直布罗陀",
"weight": 3.2e-6
},
{
"weight": 2.87e-6,
"name": "列支敦士登"
},
{
"name": "英属维尔京群岛",
"weight": 2.57e-6
},
{
"weight": 2.1e-6,
"name": "圣马力诺"
},
{
"weight": 1.75e-6,
"name": "瑙鲁"
},
{
"name": "摩纳哥",
"weight": 1.75e-6
},
{
"name": "图瓦卢",
"weight": 1.72e-6
},
{
"name": "库克群岛",
"weight": 1.44e-6
},
{
"name": "帕劳",
"weight": 1.44e-6
},
{
"weight": 1.41e-6,
"name": "安圭拉"
},
{
"weight": 1.05e-6,
"name": "法国(瓦利斯和富图纳)"
},
{
"weight": 6.6e-7,
"name": "法国(圣巴泰勒米)"
},
{
"name": "蒙特塞拉特",
"weight": 4.35e-7
},
{
"weight": 3.77e-7,
"name": "圣赫勒拿、阿森松和特里斯坦-达库尼亚"
},
{
"name": "法国(圣皮埃尔和密克隆)",
"weight": 2.86e-7
},
{
"name": "福克兰群岛",
"weight": 2.48e-7
}
]

1
go.mod
View File

@ -11,6 +11,7 @@ require (
github.com/golang/protobuf v1.5.2
github.com/gorilla/websocket v1.4.2
github.com/imroc/req v0.3.0
github.com/mroth/weightedrand v0.4.1
github.com/robfig/cron v1.2.0
github.com/shirou/gopsutil v3.21.8+incompatible
github.com/sirupsen/logrus v1.8.1

2
go.sum
View File

@ -77,6 +77,8 @@ github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJ
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.2-0.20210109003243-333559e1834b h1:6Xjqolv/0DDdUqlpnsTomXQvjvvkz7Ux7TcMALvozEw=
github.com/modern-go/reflect2 v1.0.2-0.20210109003243-333559e1834b/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/mroth/weightedrand v0.4.1 h1:rHcbUBopmi/3x4nnrvwGJBhX9d0vk+KgoLUZeDP6YyI=
github.com/mroth/weightedrand v0.4.1/go.mod h1:3p2SIcC8al1YMzGhAIoXD+r9olo/g/cdJgAD905gyNE=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=

View File

@ -27,6 +27,7 @@ import (
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_minecraft" // MCSManager
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_music" // 点歌
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_omikuji" // 浅草寺求签
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_reborn" // 投胎
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_shindan" // 测定
// b站相关

View File

@ -16,7 +16,7 @@ import (
const (
datapath = "data/Diana"
pbfile = datapath + "/text.pb"
pburl = "https://codechina.csdn.net/u011570312/ZeroBot-Plugin/-/raw/master/data/Diana/text.pb"
pburl = "https://codechina.csdn.net/u011570312/ZeroBot-Plugin/-/raw/master/" + pbfile
)
var (

View File

@ -17,8 +17,6 @@ const (
)
func init() { // 插件主体
// TODO: 1.17 特性暂不增加
// rand.Seed(time.Now().UnixMicro())
rand.Seed(time.Now().UnixNano())
control.Register("omikuji", &control.Options{
DisableOnDefault: false,

21
plugin_reborn/born.go Normal file
View File

@ -0,0 +1,21 @@
package reborn
import (
wr "github.com/mroth/weightedrand"
)
var (
gender, _ = wr.NewChooser(
wr.Choice{Item: "男孩子", Weight: 50707},
wr.Choice{Item: "女孩子", Weight: 48292},
wr.Choice{Item: "雌雄同体", Weight: 1001},
)
)
func randcoun() string {
return areac.Pick().(string)
}
func randgen() string {
return gender.Pick().(string)
}

82
plugin_reborn/load.go Normal file
View File

@ -0,0 +1,82 @@
package reborn
import (
"encoding/json"
"io"
"log"
"net/http"
"os"
wr "github.com/mroth/weightedrand"
)
const (
datapath = "data/Reborn"
jsonfile = datapath + "/rate.json"
pburl = "https://codechina.csdn.net/u011570312/ZeroBot-Plugin/-/raw/master/" + jsonfile
)
type rate []struct {
Name string `json:"name"`
Weight float64 `json:"weight"`
}
var (
areac *wr.Chooser
)
func init() {
area := make(rate, 226)
err := load(&area)
if err != nil {
panic(err)
}
choices := make([]wr.Choice, len(area))
for i, a := range area {
choices[i].Item = a.Name
choices[i].Weight = uint(a.Weight * 1e9)
}
areac, err = wr.NewChooser(choices...)
if err != nil {
panic(err)
}
}
// load 加载rate数据
func load(area *rate) error {
if _, err := os.Stat(jsonfile); err == nil || os.IsExist(err) {
f, err := os.Open(jsonfile)
if err == nil {
defer f.Close()
data, err1 := io.ReadAll(f)
if err1 == nil {
if len(data) > 0 {
return json.Unmarshal(data, area)
}
}
return err1
}
} else { // 如果没有小作文,则从 url 下载
f, err := os.Create(jsonfile)
if err != nil {
return err
}
defer f.Close()
resp, err := http.Get(pburl)
if err == nil {
defer resp.Body.Close()
if resp.ContentLength > 0 {
log.Printf("[Reborn] 从镜像下载国家和地区%d字节...", resp.ContentLength)
data, err := io.ReadAll(resp.Body)
if err == nil && len(data) > 0 {
_, _ = f.Write(data)
return json.Unmarshal(data, area)
}
return err
}
return nil
}
return err
}
return nil
}

27
plugin_reborn/main.go Normal file
View File

@ -0,0 +1,27 @@
// Package reborn 投胎 来自 https://github.com/YukariChiba/tgbot/blob/main/modules/Reborn.py
package reborn
import (
"fmt"
"math/rand"
"time"
"github.com/FloatTech/ZeroBot-Plugin/control"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
)
func init() {
rand.Seed(time.Now().UnixNano())
control.Register("reborn", &control.Options{
DisableOnDefault: false,
Help: "投胎\n- reborn",
}).OnFullMatch("reborn").SetBlock(true).
Handle(func(ctx *zero.Ctx) {
if rand.Int31() > 1<<27 {
ctx.SendChain(message.At(ctx.Event.UserID), message.Text(fmt.Sprintf("投胎成功!\n您出生在 %s, 是 %s。", randcoun(), randgen())))
} else {
ctx.SendChain(message.At(ctx.Event.UserID), message.Text("投胎失败!\n您没能活到出生祝您下次好运"))
}
})
}