Skip to content
This repository was archived by the owner on Jul 20, 2024. It is now read-only.

Commit b6524e2

Browse files
committed
add c, c++ and nim support for botway, update deploy cmd
1 parent 0b6e553 commit b6524e2

File tree

15 files changed

+493
-40
lines changed

15 files changed

+493
-40
lines changed

internal/dashboard/icons/glyph.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,9 @@ var IconSet = map[string]*IconInfo{
2929
"dart": {icon: "\ue798", color: [3]uint8{87, 182, 240}},
3030
"java": {icon: "\uf675", color: [3]uint8{244, 68, 62}},
3131
"kotlin": {icon: "\ue70e", color: [3]uint8{139, 195, 74}},
32+
"c": {icon: "\ufb70", color: [3]uint8{2, 119, 189}},
33+
"cpp": {icon: "\ufb71", color: [3]uint8{2, 119, 189}},
34+
"nim": {icon: "\uf6a4", color: [3]uint8{255, 202, 61}},
35+
"lua": {icon: "\ue620", color: [3]uint8{66, 165, 245}},
3236
"other": {icon: "\ufba7", color: [3]uint8{249, 89, 63}},
3337
}

internal/pipes/new/cmds.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ func updateLangs(msg tea.Msg, m model) (tea.Model, tea.Cmd) {
4444
}
4545
} else {
4646
if m.PlatformChoice == 0 {
47-
if m.LangChoice > 11 {
48-
m.LangChoice = 11
47+
if m.LangChoice > 14 {
48+
m.LangChoice = 14
4949
}
5050
} else {
5151
if m.LangChoice > 7 {
@@ -141,6 +141,12 @@ func buildBot(msg tea.Msg, m model) (tea.Model, tea.Cmd) {
141141
} else if m.LangChoice == 9 || m.LangChoice == 10 {
142142
l = "Java"
143143
} else if m.LangChoice == 11 {
144+
l = "C++"
145+
} else if m.LangChoice == 12 {
146+
l = "Nim"
147+
} else if m.LangChoice == 13 {
148+
l = "C"
149+
} else if m.LangChoice == 14 {
144150
l = "Crystal"
145151
}
146152

internal/pipes/new/create.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,11 @@ func NewBot(m model, l string, platform, lang int) {
4848
botConfig.SetDefault("author", botwayConfig.GetString("user.github_username"))
4949
botConfig.SetDefault("bot.lang", BotLang(m))
5050
botConfig.SetDefault("bot.name", opts.BotName)
51-
botConfig.SetDefault("bot.package_manager", BotPM(m))
51+
52+
if BotPM(m) != "continue" {
53+
botConfig.SetDefault("bot.package_manager", BotPM(m))
54+
}
55+
5256
botConfig.SetDefault("bot.type", BotType(m))
5357
botConfig.SetDefault("bot.start_cmd", BotStartCmd(m))
5458

@@ -103,7 +107,11 @@ func NewBot(m model, l string, platform, lang int) {
103107
respone = CSharpGitIgnore()
104108
}
105109

106-
if lang == 8 {
110+
if lang == 9 || lang == 10 {
111+
respone += "\n.gradle\nbuild"
112+
}
113+
114+
if lang == 11 {
107115
respone = `/docs/
108116
/lib/
109117
/bin/
@@ -115,10 +123,6 @@ func NewBot(m model, l string, platform, lang int) {
115123
/shard.lock`
116124
}
117125

118-
if lang == 9 || lang == 10 {
119-
respone += "\n.gradle\nbuild"
120-
}
121-
122126
dotGitIgnoreFileContent = respone + "\n*.lock"
123127

124128
if BotLang(m) == "rust" && BotPM(m) == "fleet" {

internal/pipes/new/discord_handler.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package new
22

33
import (
4+
"github.com/abdfnx/botway/templates/discord/c"
5+
"github.com/abdfnx/botway/templates/discord/cpp"
46
"github.com/abdfnx/botway/templates/discord/crystal"
7+
"github.com/abdfnx/botway/templates/discord/nim"
58
"github.com/abdfnx/botway/templates/discord/csharp"
69
"github.com/abdfnx/botway/templates/discord/dart"
710
"github.com/abdfnx/botway/templates/discord/deno"
@@ -53,6 +56,12 @@ func DiscordHandler(m model) {
5356
} else if m.PlatformChoice == 0 && m.LangChoice == 10 {
5457
java.DiscordJava(opts.BotName)
5558
} else if m.PlatformChoice == 0 && m.LangChoice == 11 {
59+
cpp.DiscordCpp(opts.BotName)
60+
} else if m.PlatformChoice == 0 && m.LangChoice == 12 {
61+
nim.DiscordNim(opts.BotName)
62+
} else if m.PlatformChoice == 0 && m.LangChoice == 13 {
63+
c.DiscordC(opts.BotName)
64+
} else if m.PlatformChoice == 0 && m.LangChoice == 14 {
5665
crystal.DiscordCrystal(opts.BotName)
5766
}
5867
}

internal/pipes/new/tools.go

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func BotType(m model) string {
3838
return "# You need to specify a platform (discord, telegram, slack)"
3939
}
4040

41-
var blankLangMessage = "# You need to specify a language (python, go, nodejs, ruby, rust, deno, csharp, dart, php, kotlin, java, crystal)"
41+
var blankLangMessage = "# You need to specify a language (python, go, nodejs, ruby, rust, deno, csharp, dart, php, kotlin, java, crystal, c++, nim, c)"
4242

4343
func BotLang(m model) string {
4444
if m.LangChoice == 0 {
@@ -68,6 +68,12 @@ func BotLang(m model) string {
6868
} else if m.LangChoice == 10 {
6969
return "java"
7070
} else if m.LangChoice == 11 {
71+
return "cpp"
72+
} else if m.LangChoice == 12 {
73+
return "nim"
74+
} else if m.LangChoice == 13 {
75+
return "c"
76+
} else if m.LangChoice == 14 {
7177
return "crystal"
7278
}
7379

@@ -121,7 +127,15 @@ func BotStartCmd(m model) string {
121127
} else {
122128
return "./gradlew run"
123129
}
124-
} else if m.LangChoice == 11 {
130+
} else if m.LangChoice == 11 || m.LangChoice == 13 {
131+
if runtime.GOOS == "windows" {
132+
return `.\run.ps1`
133+
} else {
134+
return "./run"
135+
}
136+
} else if m.LangChoice == 12 {
137+
return "nim c -r src/main.nim"
138+
} else if m.LangChoice == 14 {
125139
return "crystal run src/main.cr"
126140
}
127141

@@ -162,6 +176,12 @@ func BotPM(m model) string {
162176
} else if m.LangChoice == 9 || m.LangChoice == 10 {
163177
return "gradle"
164178
} else if m.LangChoice == 11 {
179+
return "cmake"
180+
} else if m.LangChoice == 12 {
181+
return "nimble"
182+
} else if m.LangChoice == 13 {
183+
return "continue"
184+
} else if m.LangChoice == 14 {
165185
return "shards"
166186
}
167187

internal/pipes/new/views.go

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func langsView(m model) string {
5656

5757
if m.PlatformChoice != 2 {
5858
langs += fmt.Sprintf(
59-
"\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s",
59+
"\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s",
6060
checkbox("Ruby", l == 3),
6161
checkbox("Rust", l == 4),
6262
checkbox("Deno", l == 5),
@@ -65,13 +65,16 @@ func langsView(m model) string {
6565
checkbox("PHP", l == 8),
6666
checkbox("Kotlin", l == 9),
6767
checkbox("Java", l == 10),
68+
checkbox("C++", l == 11),
69+
checkbox("Nim", l == 12),
6870
)
6971
}
7072

7173
if m.PlatformChoice == 0 {
7274
langs += fmt.Sprintf(
73-
"\n%s",
74-
checkbox("Crystal", l == 11),
75+
"\n%s\n%s",
76+
checkbox("C", l == 13),
77+
checkbox("Crystal", l == 14),
7578
)
7679
}
7780

@@ -102,6 +105,16 @@ func pmsView(m model) string {
102105
} else if m.LangChoice == 8 {
103106
l = "PHP"
104107
} else if m.LangChoice == 9 {
108+
l = "Kotlin"
109+
} else if m.LangChoice == 10 {
110+
l = "Java"
111+
} else if m.LangChoice == 11 {
112+
l = "C++"
113+
} else if m.LangChoice == 12 {
114+
l = "Nim"
115+
} else if m.LangChoice == 13 {
116+
l = "C"
117+
} else if m.LangChoice == 14 {
105118
l = "Crystal"
106119
}
107120

@@ -157,6 +170,12 @@ func pmsView(m model) string {
157170
} else if m.LangChoice == 9 || m.LangChoice == 10 {
158171
langs += checkbox("gradle", pm == 0)
159172
} else if m.LangChoice == 11 {
173+
langs += checkbox("cmake", pm == 0)
174+
} else if m.LangChoice == 12 {
175+
langs += checkbox("nimble", pm == 0)
176+
} else if m.LangChoice == 13 {
177+
langs += checkbox("continue", pm == 0)
178+
} else if m.LangChoice == 14 {
160179
langs += checkbox("shards", pm == 0)
161180
}
162181

@@ -287,9 +306,26 @@ func finalView(m model) string {
287306
pm = "gradle"
288307

289308
case 11:
309+
lang = "C++"
310+
pm = "cmake"
311+
312+
case 12:
313+
lang = "Nim"
314+
pm = "nimble"
315+
316+
case 13:
317+
lang = "C"
318+
319+
case 14:
290320
lang = "Crystal"
291321
pm = "shards"
292322
}
293323

294-
return "\n🤖 Noice, you're going to build a " + prim.Render(platform) + " bot via " + prim.Render(lang) + " with " + prim.Render(pm) + " package manager\n"
324+
msg := "\n🤖 Noice, you're going to build a " + prim.Render(platform) + " bot via " + prim.Render(lang)
325+
326+
if lang == "C" {
327+
return msg + "\n"
328+
} else {
329+
return msg + " with " + prim.Render(pm) + " package manager\n"
330+
}
295331
}

internal/railway/deploy.go

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,6 @@ import (
1616
func (h *Handler) Delpoy(ctx context.Context, req *entity.CommandRequest) error {
1717
CheckBuildKit()
1818

19-
var src string
20-
21-
if len(req.Args) == 0 {
22-
src = "."
23-
} else {
24-
src = "./" + req.Args[0]
25-
}
26-
2719
isVerbose, err := req.Cmd.Flags().GetBool("verbose")
2820
if err != nil {
2921
// Verbose mode isn't a necessary flag; just default to false.
@@ -48,6 +40,9 @@ func (h *Handler) Delpoy(ctx context.Context, req *entity.CommandRequest) error
4840
return err
4941
}
5042

43+
fmt.Print(constants.INFO_BACKGROUND.Render("INFO"))
44+
fmt.Println(constants.INFO_FOREGROUND.Render("Loaded project configuration for " + constants.SUCCESS_FOREGROUND.Render(projectConfig.ProjectPath)))
45+
5146
if isVerbose {
5247
fmt.Print(constants.INFO_BACKGROUND.Render("INFO"))
5348
fmt.Println(constants.INFO_FOREGROUND.Render(" Loading environment"))
@@ -127,7 +122,7 @@ func (h *Handler) Delpoy(ctx context.Context, req *entity.CommandRequest) error
127122
ProjectID: projectConfig.Project,
128123
EnvironmentID: environment.Id,
129124
ServiceID: serviceId,
130-
RootDir: src,
125+
RootDir: projectConfig.ProjectPath,
131126
})
132127

133128
if err != nil {

templates/discord/c/contents.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package c
2+
3+
import "github.com/abdfnx/botway/templates"
4+
5+
func DockerfileContent(botName string) string {
6+
return templates.Content("c-discord.dockerfile", "dockerfiles", botName)
7+
}
8+
9+
func Resources() string {
10+
return templates.Content("discord/c.md", "resources", "")
11+
}
12+
13+
func MainCContent() string {
14+
return templates.Content("src/main.c", "discord-c", "")
15+
}
16+
17+
func BWCContent(botName string) string {
18+
return templates.Content("src/botway.h", "discord-c", botName)
19+
}
20+
21+
func RunPsFileContent() string {
22+
return templates.Content("run.ps1", "discord-c", "")
23+
}

templates/discord/c/index.go

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package c
2+
3+
import (
4+
"fmt"
5+
"log"
6+
"os"
7+
"os/exec"
8+
"path/filepath"
9+
"runtime"
10+
11+
"github.com/abdfnx/botway/constants"
12+
"github.com/abdfnx/botway/templates"
13+
"github.com/abdfnx/looker"
14+
)
15+
16+
func DiscordC(botName string) {
17+
_, err := looker.LookPath("gcc")
18+
19+
if err != nil {
20+
fmt.Print(constants.FAIL_BACKGROUND.Render("ERROR"))
21+
fmt.Println(constants.FAIL_FOREGROUND.Render(" gcc is not installed"))
22+
} else {
23+
mainFile := os.WriteFile(filepath.Join(botName, "src", "main.c"), []byte(MainCContent()), 0644)
24+
botwayHeaderFile := os.WriteFile(filepath.Join(botName, "src", "botway.h"), []byte(BWCContent(botName)), 0644)
25+
runPsFile := os.WriteFile(filepath.Join(botName, "run.ps1"), []byte(RunPsFileContent()), 0644)
26+
dockerFile := os.WriteFile(filepath.Join(botName, "Dockerfile"), []byte(DockerfileContent(botName)), 0644)
27+
resourcesFile := os.WriteFile(filepath.Join(botName, "resources.md"), []byte(Resources()), 0644)
28+
29+
if mainFile != nil {
30+
log.Fatal(mainFile)
31+
}
32+
33+
if botwayHeaderFile != nil {
34+
log.Fatal(botwayHeaderFile)
35+
}
36+
37+
if runPsFile != nil {
38+
log.Fatal(runPsFile)
39+
}
40+
41+
if dockerFile != nil {
42+
log.Fatal(dockerFile)
43+
}
44+
45+
if resourcesFile != nil {
46+
log.Fatal(resourcesFile)
47+
}
48+
49+
getConcord := exec.Command("bash", "-c", "curl -sL https://raw.githubusercontent.com/botwayorg/discord-c/main/scripts/install-concord.sh | bash")
50+
51+
if runtime.GOOS == "windows" {
52+
getConcord = exec.Command("powershell.exe", "irm https://raw.githubusercontent.com/botwayorg/discord-c/main/scripts/install-concord.ps1 | iex")
53+
}
54+
55+
getConcord.Dir = botName
56+
getConcord.Stdin = os.Stdin
57+
getConcord.Stdout = os.Stdout
58+
getConcord.Stderr = os.Stderr
59+
err = getConcord.Run()
60+
61+
if err != nil {
62+
log.Printf("error: %v\n", err)
63+
}
64+
65+
run := exec.Command("bash", "-c", "gcc src/main.c -o bot -pthread -ldiscord -lcurl")
66+
67+
if runtime.GOOS == "windows" {
68+
run = exec.Command("powershell.exe", "./run.ps1")
69+
}
70+
71+
run.Dir = botName
72+
run.Stdin = os.Stdin
73+
run.Stdout = os.Stdout
74+
run.Stderr = os.Stderr
75+
err = run.Run()
76+
77+
if err != nil {
78+
log.Printf("error: %v\n", err)
79+
}
80+
81+
templates.CheckProject(botName, "discord")
82+
}
83+
}

0 commit comments

Comments
 (0)