Compare commits

..

No commits in common. "98f664d08c081664685582f746cd8ef5fb6d88b6" and "5ad31ab926ddfb52e381fe6212cf1b1328baccbc" have entirely different histories.

3 changed files with 35 additions and 71 deletions

16
main.go
View file

@ -2,11 +2,9 @@ package main
import ( import (
"context" "context"
"fmt"
"log" "log"
"os" "os"
"os/signal" "os/signal"
"strings"
"syscall" "syscall"
"time" "time"
@ -15,26 +13,12 @@ import (
"git.wh64.net/muffin/goMuffin/configs" "git.wh64.net/muffin/goMuffin/configs"
"git.wh64.net/muffin/goMuffin/databases" "git.wh64.net/muffin/goMuffin/databases"
"git.wh64.net/muffin/goMuffin/handler" "git.wh64.net/muffin/goMuffin/handler"
dbmigrate "git.wh64.net/muffin/goMuffin/scripts/dbMigrate"
deleteallcommands "git.wh64.net/muffin/goMuffin/scripts/deleteAllCommands"
"github.com/bwmarrin/discordgo" "github.com/bwmarrin/discordgo"
) )
func main() { func main() {
config := configs.Config config := configs.Config
if len(os.Args) > 1 {
switch strings.ToLower(os.Args[1]) {
case "dbmigrate":
dbmigrate.DBMigrate()
case "deleteallcommands":
deleteallcommands.DeleteAllCommands()
default:
panic(fmt.Errorf("[goMuffin] 명령어 인자에는 dbmigrate나 deleteallcommands만 올 수 있어요."))
}
return
}
dg, err := discordgo.New("Bot " + config.Bot.Token) dg, err := discordgo.New("Bot " + config.Bot.Token)
if err != nil { if err != nil {
log.Println("[goMuffin] 봇의 세션을 만들수가 없어요.") log.Println("[goMuffin] 봇의 세션을 만들수가 없어요.")

View file

@ -1,4 +1,4 @@
package dbmigrate package main
import ( import (
"context" "context"
@ -9,9 +9,8 @@ import (
"time" "time"
"git.wh64.net/muffin/goMuffin/configs" "git.wh64.net/muffin/goMuffin/configs"
"git.wh64.net/muffin/goMuffin/databases"
_ "github.com/go-sql-driver/mysql" _ "github.com/go-sql-driver/mysql"
"go.mongodb.org/mongo-driver/v2/bson"
"go.mongodb.org/mongo-driver/v2/mongo" "go.mongodb.org/mongo-driver/v2/mongo"
"go.mongodb.org/mongo-driver/v2/mongo/options" "go.mongodb.org/mongo-driver/v2/mongo/options"
) )
@ -19,10 +18,9 @@ import (
var wg sync.WaitGroup var wg sync.WaitGroup
// 이 스크립트는 MariaDB -> MongoDB로의 전환을 위해 만들었음. // 이 스크립트는 MariaDB -> MongoDB로의 전환을 위해 만들었음.
func DBMigrate() { func main() {
mariaURL := os.Getenv("PREVIOUS_DATABASE_URL") mariaURL := os.Getenv("PREVIOUS_DATABASE_URL")
mongoURL := configs.Config.DatabaseURL mongoURL := configs.Config.DatabaseURL
dbName := configs.Config.DBName
dbConnectionQuery := "?parseTime=true" dbConnectionQuery := "?parseTime=true"
@ -32,7 +30,8 @@ func DBMigrate() {
go func() { go func() {
defer wg.Done() defer wg.Done()
newDataList := []any{} var text, persona string
var createdAt time.Time
mariaDB, err := sql.Open("mysql", mariaURL+dbConnectionQuery) mariaDB, err := sql.Open("mysql", mariaURL+dbConnectionQuery)
if err != nil { if err != nil {
panic(err) panic(err)
@ -55,9 +54,6 @@ func DBMigrate() {
i := 1 i := 1
for rows.Next() { for rows.Next() {
var text, persona string
var createdAt time.Time
fmt.Printf("statement %d\n", i) fmt.Printf("statement %d\n", i)
err = rows.Scan(&text, &persona, &createdAt) err = rows.Scan(&text, &persona, &createdAt)
if err != nil { if err != nil {
@ -67,25 +63,21 @@ func DBMigrate() {
if text == "" { if text == "" {
text = "살ㄹ려주세요" text = "살ㄹ려주세요"
} }
databases.Texts.InsertOne(context.TODO(), databases.InsertText{
newDataList = append(newDataList, bson.M{ Text: text,
"text": text, Persona: persona,
"persona": persona, CreatedAt: createdAt,
"created_at": createdAt,
}) })
i++ i++
} }
_, err = mongoDB.Database(dbName).Collection("text").InsertMany(context.TODO(), newDataList)
if err != nil {
panic(err)
}
}() }()
// nsfw_content -> text // nsfw_content -> text
go func() { go func() {
defer wg.Done() defer wg.Done()
newDataList := []any{} var text, persona string
var createdAt time.Time
mariaDB, err := sql.Open("mysql", mariaURL+dbConnectionQuery) mariaDB, err := sql.Open("mysql", mariaURL+dbConnectionQuery)
if err != nil { if err != nil {
panic(err) panic(err)
@ -108,9 +100,6 @@ func DBMigrate() {
i := 1 i := 1
for rows.Next() { for rows.Next() {
var text, persona string
var createdAt time.Time
fmt.Printf("nsfw_content %d\n", i) fmt.Printf("nsfw_content %d\n", i)
err = rows.Scan(&text, &persona, &createdAt) err = rows.Scan(&text, &persona, &createdAt)
if err != nil { if err != nil {
@ -120,26 +109,21 @@ func DBMigrate() {
if text == "" { if text == "" {
text = "살ㄹ려주세요" text = "살ㄹ려주세요"
} }
databases.Texts.InsertOne(context.TODO(), databases.InsertText{
newDataList = append(newDataList, bson.M{ Text: text,
"text": text, Persona: persona,
"persona": persona, CreatedAt: createdAt,
"created_at": createdAt,
}) })
i++ i++
} }
_, err = mongoDB.Database(dbName).Collection("text").InsertMany(context.TODO(), newDataList)
if err != nil {
panic(err)
}
}() }()
// learn -> learn // learn -> learn
go func() { go func() {
defer wg.Done() defer wg.Done()
newDataList := []any{} var command, result, userId string
var createdAt time.Time
mariaDB, err := sql.Open("mysql", mariaURL+dbConnectionQuery) mariaDB, err := sql.Open("mysql", mariaURL+dbConnectionQuery)
if err != nil { if err != nil {
panic(err) panic(err)
@ -162,31 +146,22 @@ func DBMigrate() {
i := 1 i := 1
for rows.Next() { for rows.Next() {
var command, result, userId string
var createdAt time.Time
fmt.Printf("learn %d\n", i) fmt.Printf("learn %d\n", i)
err = rows.Scan(&command, &result, &userId, &createdAt) err = rows.Scan(&command, &result, &userId, &createdAt)
if err != nil { if err != nil {
panic(err) panic(err)
} }
newDataList = append(newDataList, bson.M{ databases.Learns.InsertOne(context.TODO(), databases.InsertLearn{
"command": command, Command: command,
"result": result, Result: result,
"user_id": userId, UserId: userId,
"created_at": createdAt, CreatedAt: createdAt,
}) })
i++ i++
} }
_, err = mongoDB.Database(dbName).Collection("learn").InsertMany(context.TODO(), newDataList)
if err != nil {
panic(err)
}
}() }()
// 모든 고루틴이 끝날 떄 까지 대기 // 모든 고루틴이 끝날 떄 까지 대기
wg.Wait() wg.Wait()
fmt.Println("데이터 마이그레이션이 끝났어요.")
} }

View file

@ -1,4 +1,4 @@
package deleteallcommands package main
import ( import (
"flag" "flag"
@ -8,24 +8,29 @@ import (
"os" "os"
"strings" "strings"
"git.wh64.net/muffin/goMuffin/configs"
"github.com/bwmarrin/discordgo" "github.com/bwmarrin/discordgo"
"github.com/joho/godotenv"
) )
func DeleteAllCommands() { func main() {
godotenv.Load()
var answer string var answer string
id := flag.String("id", "", "디스코드 봇의 토큰") id := flag.String("id", "", "discordBot's token")
flag.Parse() flag.Parse()
fmt.Printf("정말로 모든 명령어를 삭제하시겠어요? [y/N]: ") fmt.Printf("Do you want to delete all commands? [y/N]: ")
fmt.Scanf("%s", &answer) fmt.Scanf("%s", &answer)
if strings.ToLower(answer) != "y" && strings.ToLower(answer) != "yes" { if strings.ToLower(answer) != "y" {
os.Exit(1) os.Exit(1)
} }
if os.Getenv("BOT_TOKEN") == "" {
panic(fmt.Errorf("You need a BOT_TOKEN environment."))
}
if *id == "" { if *id == "" {
panic(fmt.Errorf("--id 플래그의 값이 필요해요.")) panic(fmt.Errorf("You need a --id flag value."))
} }
c := http.Client{} c := http.Client{}
@ -34,7 +39,7 @@ func DeleteAllCommands() {
panic(err) panic(err)
} }
req.Header.Add("Authorization", "Bot "+configs.Config.Bot.Token) req.Header.Add("Authorization", "Bot "+os.Getenv("BOT_TOKEN"))
resp, err := c.Do(req) resp, err := c.Do(req)
if err != nil { if err != nil {