103 lines
3.9 KiB
Go
103 lines
3.9 KiB
Go
package lib
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
"sync"
|
|
)
|
|
|
|
const Banner = `
|
|
████████╗███████╗██╗ ███████╗████████╗██╗ ██╗██████╗ ███████╗
|
|
██╔══╝██╔════╝██║ ██╔════╝╚══██╔══╝╚██╗ ██╔╝██╔══██╗██╔════╝
|
|
██║ █████╗ ██║ █████╗ ██║ ╚████╔╝ ██████╔╝█████╗
|
|
██║ ██╔══╝ ██║ ██╔══╝ ██║ ╚██╔╝ ██╔═══╝ ██╔══╝
|
|
██║ ███████╗███████╗███████╗ ██║ ██║ ██║ ███████╗
|
|
╚═╝ ╚══════╝╚══════╝╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝
|
|
|
|
██████╗ █████╗ ███╗ ███╗███████╗███████╗
|
|
██╔════╝ ██╔══██╗████╗ ████║██╔════╝██╔════╝
|
|
██║ ███╗███████║██╔████╔██║█████╗ ███████╗
|
|
██║ ██║██╔══██║██║╚██╔╝██║██╔══╝ ╚════██║
|
|
╚██████╔╝██║ ██║██║ ╚═╝ ██║███████╗███████║
|
|
╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚══════╝
|
|
|
|
░░ BBS v2.0 ░░ teletype.hu ░░
|
|
Welcome to the Teletype community bulletin board!
|
|
`
|
|
|
|
type BBS struct {
|
|
Messages []Message
|
|
OnlineUsers map[string]string // addr -> username
|
|
Mu sync.Mutex
|
|
WikiToken string
|
|
WikiRepo *WikiRepository
|
|
CatalogRepo *CatalogRepository
|
|
}
|
|
|
|
func NewBBS(wikiToken string) *BBS {
|
|
return &BBS{
|
|
Messages: []Message{},
|
|
OnlineUsers: make(map[string]string),
|
|
WikiToken: wikiToken,
|
|
WikiRepo: NewWikiRepository(wikiToken),
|
|
CatalogRepo: NewCatalogRepository(),
|
|
}
|
|
}
|
|
|
|
type UI struct {
|
|
Printer *Printer
|
|
Lang T
|
|
}
|
|
|
|
func NewUI(printer *Printer, lang T) *UI {
|
|
return &UI{Printer: printer, Lang: lang}
|
|
}
|
|
|
|
type Session struct {
|
|
BBS *BBS
|
|
Printer *Printer
|
|
Username string
|
|
Addr string
|
|
Lang T
|
|
}
|
|
|
|
func NewSession(bbs *BBS, printer *Printer, username string, addr string, lang T) *Session {
|
|
return &Session{
|
|
BBS: bbs,
|
|
Printer: printer,
|
|
Username: username,
|
|
Addr: addr,
|
|
Lang: lang,
|
|
}
|
|
}
|
|
|
|
func (ui *UI) MainMenu(username string) string {
|
|
headerLine := strings.Repeat("═", W)
|
|
|
|
l1 := ui.Printer.PadLine(fmt.Sprintf(" %s%s%s %s@%s%s", YL, ui.Lang["MainMenuTitle"], R, GY, username, R), W)
|
|
l2 := ui.Printer.PadLine(fmt.Sprintf(" %s[1]%s %s", GR, R, ui.Lang["MenuUzenopal"]), W/2) + ui.Printer.PadLine(fmt.Sprintf(" %s[2]%s %s", BL, R, ui.Lang["MenuBlog"]), W/2)
|
|
l3 := ui.Printer.PadLine(fmt.Sprintf(" %s[3]%s %s", MG, R, ui.Lang["MenuHowto"]), W/2) + ui.Printer.PadLine(fmt.Sprintf(" %s[4]%s %s", YL, R, ui.Lang["MenuCatalog"]), W/2)
|
|
l4 := ui.Printer.PadLine(fmt.Sprintf(" %s[5]%s %s", CY, R, ui.Lang["MenuOnline"]), W/2) + ui.Printer.PadLine(fmt.Sprintf(" %s[6]%s %s", GY, R, ui.Lang["MenuSysinfo"]), W/2)
|
|
l5 := ui.Printer.PadLine(fmt.Sprintf(" %s[Q]%s %s", RD, R, ui.Lang["MenuExit"]), W)
|
|
|
|
return fmt.Sprintf(
|
|
"\n%s╔%s╗%s\n"+
|
|
"%s║%s%s║%s\n"+
|
|
"%s╠%s╣%s\n"+
|
|
"%s║%s%s║%s\n"+
|
|
"%s║%s%s║%s\n"+
|
|
"%s║%s%s║%s\n"+
|
|
"%s║%s%s║%s\n"+
|
|
"%s╚%s╝%s\n%s",
|
|
WH, headerLine, R,
|
|
WH, l1, WH, R,
|
|
WH, headerLine, R,
|
|
WH, l2, WH, R,
|
|
WH, l3, WH, R,
|
|
WH, l4, WH, R,
|
|
WH, l5, WH, R,
|
|
WH, headerLine, R,
|
|
ui.Lang["Choice"],
|
|
)
|
|
}
|