From fdaaf6c42bff0f74281585f932a941b41b5ed662 Mon Sep 17 00:00:00 2001
From: awencat <2364355319@qq.com>
Date: Sun, 12 Jul 2026 13:29:51 +0800
Subject: [PATCH 1/5] allow for git fix #4
---
.idea/.gitignore | 10 ++++++++++
.idea/dataSources.xml | 12 ++++++++++++
.idea/go.imports.xml | 10 ++++++++++
.idea/misc.xml | 6 ++++++
.idea/modules.xml | 8 ++++++++
.idea/necore.iml | 10 ++++++++++
.idea/vcs.xml | 6 ++++++
main.go | 2 +-
service/article.go | 1 +
9 files changed, 64 insertions(+), 1 deletion(-)
create mode 100644 .idea/.gitignore
create mode 100644 .idea/dataSources.xml
create mode 100644 .idea/go.imports.xml
create mode 100644 .idea/misc.xml
create mode 100644 .idea/modules.xml
create mode 100644 .idea/necore.iml
create mode 100644 .idea/vcs.xml
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..7d05e99
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,10 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
+# 基于编辑器的 HTTP 客户端请求
+/httpRequests/
+# 依赖于环境的 Maven 主目录路径
+/mavenHomeManager.xml
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
new file mode 100644
index 0000000..d1d90ab
--- /dev/null
+++ b/.idea/dataSources.xml
@@ -0,0 +1,12 @@
+
+
+
+
+ sqlite.xerial
+ true
+ org.sqlite.JDBC
+ jdbc:sqlite:$PROJECT_DIR$/data/user.sqlite3
+ $ProjectFileDir$
+
+
+
\ No newline at end of file
diff --git a/.idea/go.imports.xml b/.idea/go.imports.xml
new file mode 100644
index 0000000..644cdf0
--- /dev/null
+++ b/.idea/go.imports.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..f03c948
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..35aaf5f
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/necore.iml b/.idea/necore.iml
new file mode 100644
index 0000000..25ed3f6
--- /dev/null
+++ b/.idea/necore.iml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/main.go b/main.go
index 82bb15c..59bf4ca 100644
--- a/main.go
+++ b/main.go
@@ -10,7 +10,7 @@ import (
func main() {
// This will print a hash of "test". U can insert it into sqlite3 manually for an admin account (the group section should be `["admin"]`).
- // dao.DebugTestPassword()
+ //dao.DebugTestPassword()
if err := config.Init(); err != nil {
log.Fatalf("initialize configuration: %v", err)
diff --git a/service/article.go b/service/article.go
index 7a869d0..e7f4645 100644
--- a/service/article.go
+++ b/service/article.go
@@ -31,6 +31,7 @@ func generateStoredFilename(original string) (string, error) {
".webp": true,
".pdf": true,
".txt": true,
+ ".gif": true, //对gif的支持
}
if !allowedExtensions[extension] {
From a2c107a1d9c58519030dac849cc74146302513ab Mon Sep 17 00:00:00 2001
From: awencat <2364355319@qq.com>
Date: Mon, 13 Jul 2026 23:16:49 +0800
Subject: [PATCH 2/5] enhancement by awencat 1 #9
---
.idea/dataSources.xml | 7 +++++++
.idea/db-forest-config.xml | 10 ++++++++++
2 files changed, 17 insertions(+)
create mode 100644 .idea/db-forest-config.xml
diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
index d1d90ab..efe8d23 100644
--- a/.idea/dataSources.xml
+++ b/.idea/dataSources.xml
@@ -8,5 +8,12 @@
jdbc:sqlite:$PROJECT_DIR$/data/user.sqlite3
$ProjectFileDir$
+
+ sqlite.xerial
+ true
+ org.sqlite.JDBC
+ jdbc:sqlite:$PROJECT_DIR$/data/bot_connection.sqlite3
+ $ProjectFileDir$
+
\ No newline at end of file
diff --git a/.idea/db-forest-config.xml b/.idea/db-forest-config.xml
new file mode 100644
index 0000000..a0005f1
--- /dev/null
+++ b/.idea/db-forest-config.xml
@@ -0,0 +1,10 @@
+
+
+
+ .
+ ----------------------------------------
+ 1:0:5d47aad1-5a7d-4f96-b572-b985303f5818
+ 2:0:d11afa88-1e1f-4198-84e8-7048e2d43847
+ .
+
+
\ No newline at end of file
From 45e531b965c29cd8df2cfb26222b516e1c6efced Mon Sep 17 00:00:00 2001
From: awencat <2364355319@qq.com>
Date: Fri, 17 Jul 2026 10:53:28 +0800
Subject: [PATCH 3/5] fix: fix the missing commit
---
controller/router/router.go | 16 +++
dao/glossary.go | 61 +++++++++
dao/item.go | 63 +++++++++
database/database.go | 12 ++
model/glossary.go | 13 ++
model/item.go | 15 +++
service/wiki.go | 261 ++++++++++++++++++++++++++++++++++++
7 files changed, 441 insertions(+)
create mode 100644 dao/glossary.go
create mode 100644 dao/item.go
create mode 100644 model/glossary.go
create mode 100644 model/item.go
create mode 100644 service/wiki.go
diff --git a/controller/router/router.go b/controller/router/router.go
index 5539752..585c4dc 100644
--- a/controller/router/router.go
+++ b/controller/router/router.go
@@ -97,4 +97,20 @@ func SetupRoutes() {
botGroup.Delete("/token/:id", middleware.AuthNeeded(), service.DeleteBotToken)
botGroup.Get("/status", middleware.AuthNeeded(), service.GetWSStatus)
botGroup.Delete("/ws/kick/:session_id", middleware.AuthNeeded(), service.KickConnection)
+
+ wikiGroup := (*router).Group("/wiki")
+ wikiGroup.Get("/glossary", service.GetGlossaryList)
+ wikiGroup.Get("/glossary/:id", service.GetGlossaryById)
+ wikiGroup.Get("/item", service.GetItemList)
+ wikiGroup.Get("/item/:id", service.GetItemById)
+
+ wikiGroup.Post("/glossary", middleware.AuthNeeded(), service.CreateGlossary)
+ wikiGroup.Patch("/glossary/:id", middleware.AuthNeeded(), service.UpdateGlossary)
+ wikiGroup.Delete("/glossary/:id", middleware.AuthNeeded(), service.DeleteGlossary)
+ wikiGroup.Post("/item", middleware.AuthNeeded(), service.CreateItem)
+ wikiGroup.Patch("/item/:id", middleware.AuthNeeded(), service.UpdateItem)
+ wikiGroup.Delete("/item/:id", middleware.AuthNeeded(), service.DeleteItem)
+
+ wikiGroup.Post("/upload/:id", middleware.AuthNeeded(), service.UploadWikiFile)
+ wikiGroup.Delete("/upload/:id", middleware.AuthNeeded(), service.DeleteWikiFile)
}
diff --git a/dao/glossary.go b/dao/glossary.go
new file mode 100644
index 0000000..800d426
--- /dev/null
+++ b/dao/glossary.go
@@ -0,0 +1,61 @@
+package dao
+
+import (
+ "fmt"
+ "necore/database"
+ "necore/model"
+)
+
+func GetGlossaryList() ([]model.Glossary, error) {
+ db := database.GetWikiDatabase()
+ var list []model.Glossary
+ err := db.Find(&list).Error
+ return list, err
+}
+
+func GetGlossaryById(id string) (model.Glossary, error) {
+ db := database.GetWikiDatabase()
+ var entry model.Glossary
+ err := db.Where("id = ?", id).First(&entry).Error
+ return entry, err
+}
+
+func CreateGlossary(entry model.Glossary) error {
+ db := database.GetWikiDatabase()
+ return db.Create(&entry).Error
+}
+
+func UpdateGlossary(entry model.Glossary) error {
+ result := database.GetWikiDatabase().
+ Model(&model.Glossary{}).
+ Where("id = ?", entry.Id).
+ Updates(map[string]any{
+ "name": entry.Name,
+ "type": entry.Type,
+ "gallery": entry.Gallery,
+ "content": entry.Content,
+ })
+
+ if result.Error != nil {
+ return result.Error
+ }
+ if result.RowsAffected == 0 {
+ return fmt.Errorf("glossary not found")
+ }
+ return nil
+}
+
+func DeleteGlossary(id string) error {
+ result := database.GetWikiDatabase().
+ Unscoped().
+ Where("id = ?", id).
+ Delete(&model.Glossary{})
+
+ if result.Error != nil {
+ return result.Error
+ }
+ if result.RowsAffected == 0 {
+ return fmt.Errorf("glossary not found")
+ }
+ return nil
+}
diff --git a/dao/item.go b/dao/item.go
new file mode 100644
index 0000000..0f44a1d
--- /dev/null
+++ b/dao/item.go
@@ -0,0 +1,63 @@
+package dao
+
+import (
+ "fmt"
+ "necore/database"
+ "necore/model"
+)
+
+func GetItemList() ([]model.Item, error) {
+ db := database.GetWikiDatabase()
+ var list []model.Item
+ err := db.Find(&list).Error
+ return list, err
+}
+
+func GetItemById(id string) (model.Item, error) {
+ db := database.GetWikiDatabase()
+ var entry model.Item
+ err := db.Where("id = ?", id).First(&entry).Error
+ return entry, err
+}
+
+func CreateItem(entry model.Item) error {
+ db := database.GetWikiDatabase()
+ return db.Create(&entry).Error
+}
+
+func UpdateItem(entry model.Item) error {
+ result := database.GetWikiDatabase().
+ Model(&model.Item{}).
+ Where("id = ?", entry.Id).
+ Updates(map[string]any{
+ "name": entry.Name,
+ "type": entry.Type,
+ "image": entry.Image,
+ "max_stack": entry.MaxStack,
+ "recipe": entry.Recipe,
+ "content": entry.Content,
+ })
+
+ if result.Error != nil {
+ return result.Error
+ }
+ if result.RowsAffected == 0 {
+ return fmt.Errorf("item not found")
+ }
+ return nil
+}
+
+func DeleteItem(id string) error {
+ result := database.GetWikiDatabase().
+ Unscoped().
+ Where("id = ?", id).
+ Delete(&model.Item{})
+
+ if result.Error != nil {
+ return result.Error
+ }
+ if result.RowsAffected == 0 {
+ return fmt.Errorf("item not found")
+ }
+ return nil
+}
diff --git a/database/database.go b/database/database.go
index 907cff3..43dbbb5 100644
--- a/database/database.go
+++ b/database/database.go
@@ -19,6 +19,8 @@ var documentDatabase *gorm.DB
var botTokenDatabase *gorm.DB
+var wikiDatabase *gorm.DB
+
func ConnectSqlite() {
var err error
userDatabase, err = gorm.Open(sqlite.Open("data/user.sqlite3"), &gorm.Config{})
@@ -50,6 +52,12 @@ func ConnectSqlite() {
panic("failed to connect bot connection database")
}
botTokenDatabase.AutoMigrate(&model.BotToken{})
+
+ wikiDatabase, err = gorm.Open(sqlite.Open("data/wiki.sqlite3"), &gorm.Config{})
+ if err != nil {
+ panic("failed to connect wiki database")
+ }
+ wikiDatabase.AutoMigrate(&model.Glossary{}, &model.Item{})
}
func GetUserDatabase() *gorm.DB {
@@ -71,3 +79,7 @@ func GetDocumentDatabase() *gorm.DB {
func GetBotTokenDatabase() *gorm.DB {
return botTokenDatabase
}
+
+func GetWikiDatabase() *gorm.DB {
+ return wikiDatabase
+}
diff --git a/model/glossary.go b/model/glossary.go
new file mode 100644
index 0000000..329761c
--- /dev/null
+++ b/model/glossary.go
@@ -0,0 +1,13 @@
+package model
+
+import "gorm.io/gorm"
+
+type Glossary struct {
+ gorm.Model
+
+ Id string `gorm:"uniqueIndex;not null" json:"id"`
+ Name string `gorm:"not null" json:"name"`
+ Type string `json:"type"`
+ Gallery string `json:"gallery"`
+ Content string `json:"content"`
+}
diff --git a/model/item.go b/model/item.go
new file mode 100644
index 0000000..0f9f104
--- /dev/null
+++ b/model/item.go
@@ -0,0 +1,15 @@
+package model
+
+import "gorm.io/gorm"
+
+type Item struct {
+ gorm.Model
+
+ Id string `gorm:"uniqueIndex;not null" json:"id"`
+ Name string `gorm:"not null" json:"name"`
+ Type string `json:"type"`
+ Image string `json:"image"`
+ MaxStack int `json:"maxStack"`
+ Recipe string `json:"recipe"`
+ Content string `json:"content"`
+}
diff --git a/service/wiki.go b/service/wiki.go
new file mode 100644
index 0000000..209a24a
--- /dev/null
+++ b/service/wiki.go
@@ -0,0 +1,261 @@
+package service
+
+import (
+ "errors"
+ "fmt"
+ "necore/dao"
+ "necore/model"
+ "necore/util"
+ "os"
+
+ "github.com/gofiber/fiber/v2"
+ "github.com/google/uuid"
+)
+
+func checkWikiPermission(c *fiber.Ctx) bool {
+ user := c.Locals("currentUser").(model.User)
+ isAdmin := dao.ContainsGroup(user.Group, "admin")
+ isDocsAdmin := dao.ContainsGroup(user.Group, "document_admin")
+ return isAdmin || isDocsAdmin
+}
+
+// ---- Glossary handlers ----
+
+func GetGlossaryList(c *fiber.Ctx) error {
+ list, err := dao.GetGlossaryList()
+ if err != nil {
+ return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
+ "error": err.Error(),
+ })
+ }
+ if list == nil {
+ list = make([]model.Glossary, 0)
+ }
+ return c.JSON(fiber.Map{
+ "glossaries": list,
+ })
+}
+
+func GetGlossaryById(c *fiber.Ctx) error {
+ entry, err := dao.GetGlossaryById(c.Params("id"))
+ if err != nil {
+ return c.Status(fiber.StatusNotFound).JSON(fiber.Map{
+ "error": "glossary not found",
+ })
+ }
+ return c.JSON(entry)
+}
+
+func CreateGlossary(c *fiber.Ctx) error {
+ if !checkWikiPermission(c) {
+ return c.Status(fiber.StatusForbidden).JSON(fiber.Map{
+ "error": "You don't have permission to create glossary",
+ })
+ }
+ id := uuid.New().String()
+ entry := model.Glossary{Id: id}
+ if err := c.BodyParser(&entry); err != nil {
+ return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
+ "error": "Invalid request",
+ })
+ }
+ entry.Id = id
+ if err := dao.CreateGlossary(entry); err != nil {
+ return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
+ "error": err.Error(),
+ })
+ }
+ return c.JSON(fiber.Map{
+ "id": id,
+ })
+}
+
+func UpdateGlossary(c *fiber.Ctx) error {
+ if !checkWikiPermission(c) {
+ return c.Status(fiber.StatusForbidden).JSON(fiber.Map{
+ "error": "You don't have permission to update glossary",
+ })
+ }
+ var entry model.Glossary
+ if err := c.BodyParser(&entry); err != nil {
+ return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
+ "error": "Invalid request",
+ })
+ }
+ entry.Id = c.Params("id")
+ if err := dao.UpdateGlossary(entry); err != nil {
+ return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
+ "error": err.Error(),
+ })
+ }
+ return c.SendStatus(fiber.StatusOK)
+}
+
+func DeleteGlossary(c *fiber.Ctx) error {
+ if !checkWikiPermission(c) {
+ return c.Status(fiber.StatusForbidden).JSON(fiber.Map{
+ "error": "You don't have permission to delete glossary",
+ })
+ }
+ if err := dao.DeleteGlossary(c.Params("id")); err != nil {
+ return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
+ "error": err.Error(),
+ })
+ }
+ return c.SendStatus(fiber.StatusOK)
+}
+
+// ---- Item handlers ----
+
+func GetItemList(c *fiber.Ctx) error {
+ list, err := dao.GetItemList()
+ if err != nil {
+ return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
+ "error": err.Error(),
+ })
+ }
+ if list == nil {
+ list = make([]model.Item, 0)
+ }
+ return c.JSON(fiber.Map{
+ "items": list,
+ })
+}
+
+func GetItemById(c *fiber.Ctx) error {
+ entry, err := dao.GetItemById(c.Params("id"))
+ if err != nil {
+ return c.Status(fiber.StatusNotFound).JSON(fiber.Map{
+ "error": "item not found",
+ })
+ }
+ return c.JSON(entry)
+}
+
+func CreateItem(c *fiber.Ctx) error {
+ if !checkWikiPermission(c) {
+ return c.Status(fiber.StatusForbidden).JSON(fiber.Map{
+ "error": "You don't have permission to create item",
+ })
+ }
+ id := uuid.New().String()
+ entry := model.Item{Id: id}
+ if err := c.BodyParser(&entry); err != nil {
+ return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
+ "error": "Invalid request",
+ })
+ }
+ entry.Id = id
+ if err := dao.CreateItem(entry); err != nil {
+ return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
+ "error": err.Error(),
+ })
+ }
+ return c.JSON(fiber.Map{
+ "id": id,
+ })
+}
+
+func UpdateItem(c *fiber.Ctx) error {
+ if !checkWikiPermission(c) {
+ return c.Status(fiber.StatusForbidden).JSON(fiber.Map{
+ "error": "You don't have permission to update item",
+ })
+ }
+ var entry model.Item
+ if err := c.BodyParser(&entry); err != nil {
+ return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
+ "error": "Invalid request",
+ })
+ }
+ entry.Id = c.Params("id")
+ if err := dao.UpdateItem(entry); err != nil {
+ return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
+ "error": err.Error(),
+ })
+ }
+ return c.SendStatus(fiber.StatusOK)
+}
+
+func DeleteItem(c *fiber.Ctx) error {
+ if !checkWikiPermission(c) {
+ return c.Status(fiber.StatusForbidden).JSON(fiber.Map{
+ "error": "You don't have permission to delete item",
+ })
+ }
+ if err := dao.DeleteItem(c.Params("id")); err != nil {
+ return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
+ "error": err.Error(),
+ })
+ }
+ return c.SendStatus(fiber.StatusOK)
+}
+
+// ---- File upload for wiki ----
+
+func generateWikiStoredFilename(originalName string) (string, error) {
+ return generateStoredFilename(originalName)
+}
+
+func UploadWikiFile(c *fiber.Ctx) error {
+ if !checkWikiPermission(c) {
+ return c.Status(fiber.StatusForbidden).JSON(fiber.Map{
+ "error": "Forbidden",
+ })
+ }
+ id := c.Params("id")
+ file, err := c.FormFile("file")
+ if err != nil {
+ return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
+ "error": err.Error(),
+ })
+ }
+ dir := fmt.Sprintf("./contents/wiki/%s", id)
+ if err := os.MkdirAll(dir, 0o750); err != nil {
+ return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
+ }
+ storedName, err := generateWikiStoredFilename(file.Filename)
+ if err != nil {
+ return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
+ }
+ contentPath, err := util.SafeContentPath("./contents/wiki", id, storedName)
+ if err != nil {
+ return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
+ }
+ if err := c.SaveFile(file, contentPath); err != nil {
+ return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
+ }
+ return c.JSON(fiber.Map{"url": fmt.Sprintf("/contents/wiki/%s/%s", id, storedName)})
+}
+
+func DeleteWikiFile(c *fiber.Ctx) error {
+ if !checkWikiPermission(c) {
+ return c.Status(fiber.StatusForbidden).
+ JSON(fiber.Map{"error": "Forbidden"})
+ }
+ id := c.Params("id")
+ type Payload struct {
+ Filename string `json:"filename"`
+ }
+ var payload Payload
+ if err := c.BodyParser(&payload); err != nil {
+ return c.Status(fiber.StatusBadRequest).
+ JSON(fiber.Map{"error": "Invalid request body"})
+ }
+ target, err := util.SafeContentPath("./contents/wiki", id, payload.Filename)
+ if err != nil {
+ return c.Status(fiber.StatusBadRequest).
+ JSON(fiber.Map{"error": "Invalid filename"})
+ }
+ if err := os.Remove(target); err != nil {
+ if errors.Is(err, os.ErrNotExist) {
+ return c.Status(fiber.StatusNotFound).
+ JSON(fiber.Map{"error": "File not found"})
+ }
+ return c.Status(fiber.StatusInternalServerError).
+ JSON(fiber.Map{"error": "Internal server error"})
+ }
+ return c.SendStatus(fiber.StatusNoContent)
+}
+
+// generateStoredFilename is shared from article.go in the same package.
From 6bcbf7faafcea002e39a1b6b57083d279e2c5b95 Mon Sep 17 00:00:00 2001
From: awencat <2364355319@qq.com>
Date: Fri, 17 Jul 2026 10:56:15 +0800
Subject: [PATCH 4/5] fix: ignore the .idea
---
.gitignore | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/.gitignore b/.gitignore
index a6b26e4..5327bce 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,4 +23,6 @@ necore
# dotenv
.env
.env.*
-!.env.example
\ No newline at end of file
+!.env.example
+
+.idea/
\ No newline at end of file
From 5382c2bddbe3d225787a4c018699184540039a90 Mon Sep 17 00:00:00 2001
From: awencat <2364355319@qq.com>
Date: Fri, 17 Jul 2026 21:02:51 +0800
Subject: [PATCH 5/5] chore: stop tracking .idea folder
---
.idea/.gitignore | 10 ----------
.idea/dataSources.xml | 19 -------------------
.idea/db-forest-config.xml | 10 ----------
.idea/go.imports.xml | 10 ----------
.idea/misc.xml | 6 ------
.idea/modules.xml | 8 --------
.idea/necore.iml | 10 ----------
.idea/vcs.xml | 6 ------
8 files changed, 79 deletions(-)
delete mode 100644 .idea/.gitignore
delete mode 100644 .idea/dataSources.xml
delete mode 100644 .idea/db-forest-config.xml
delete mode 100644 .idea/go.imports.xml
delete mode 100644 .idea/misc.xml
delete mode 100644 .idea/modules.xml
delete mode 100644 .idea/necore.iml
delete mode 100644 .idea/vcs.xml
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 7d05e99..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-# 默认忽略的文件
-/shelf/
-/workspace.xml
-# 基于编辑器的 HTTP 客户端请求
-/httpRequests/
-# 依赖于环境的 Maven 主目录路径
-/mavenHomeManager.xml
-# Datasource local storage ignored files
-/dataSources/
-/dataSources.local.xml
diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
deleted file mode 100644
index efe8d23..0000000
--- a/.idea/dataSources.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
- sqlite.xerial
- true
- org.sqlite.JDBC
- jdbc:sqlite:$PROJECT_DIR$/data/user.sqlite3
- $ProjectFileDir$
-
-
- sqlite.xerial
- true
- org.sqlite.JDBC
- jdbc:sqlite:$PROJECT_DIR$/data/bot_connection.sqlite3
- $ProjectFileDir$
-
-
-
\ No newline at end of file
diff --git a/.idea/db-forest-config.xml b/.idea/db-forest-config.xml
deleted file mode 100644
index a0005f1..0000000
--- a/.idea/db-forest-config.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
- .
- ----------------------------------------
- 1:0:5d47aad1-5a7d-4f96-b572-b985303f5818
- 2:0:d11afa88-1e1f-4198-84e8-7048e2d43847
- .
-
-
\ No newline at end of file
diff --git a/.idea/go.imports.xml b/.idea/go.imports.xml
deleted file mode 100644
index 644cdf0..0000000
--- a/.idea/go.imports.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
deleted file mode 100644
index f03c948..0000000
--- a/.idea/misc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
deleted file mode 100644
index 35aaf5f..0000000
--- a/.idea/modules.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/necore.iml b/.idea/necore.iml
deleted file mode 100644
index 25ed3f6..0000000
--- a/.idea/necore.iml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
deleted file mode 100644
index 35eb1dd..0000000
--- a/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file