Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b249a495a4 | ||
|
|
f4d324da9b | ||
|
|
fff73cfe44 | ||
|
|
31885d76f0 | ||
|
|
fec21a0045 | ||
|
|
d721112738 | ||
|
|
dd51f7fd59 | ||
|
|
42e6ca8f26 | ||
|
|
304c645043 | ||
|
|
31fd9f9a56 |
+75
-18
@@ -1,21 +1,78 @@
|
||||
workspace:
|
||||
base: /go
|
||||
path: src/git.aiterp.net/rpdata/logbot3
|
||||
name: logbot3
|
||||
|
||||
pipeline:
|
||||
docker-release:
|
||||
image: plugins/docker
|
||||
repo: vmaple/rpdata-logbot3
|
||||
auto_tag: true
|
||||
secrets: [ docker_username, docker_password ]
|
||||
kind: pipeline
|
||||
type: docker
|
||||
|
||||
steps:
|
||||
- name: go-build-1.11
|
||||
image: golang:1.11
|
||||
commands:
|
||||
- go mod download
|
||||
- CGO_ENABLED=0 go build -ldflags "-w -s" .
|
||||
when:
|
||||
event: tag
|
||||
ref: refs/tags/*
|
||||
docker-release-latest:
|
||||
image: plugins/docker
|
||||
repo: vmaple/rpdata-logbot3
|
||||
tags: latest
|
||||
secrets: [ docker_username, docker_password ]
|
||||
event:
|
||||
exclude:
|
||||
- tag
|
||||
|
||||
- name: go-build-1.12
|
||||
image: golang:1.12
|
||||
commands:
|
||||
- go mod download
|
||||
- CGO_ENABLED=0 go build -ldflags "-w -s" .
|
||||
when:
|
||||
event: tag
|
||||
ref: refs/tags/*
|
||||
event:
|
||||
exclude:
|
||||
- tag
|
||||
|
||||
- name: go-build-1.13
|
||||
image: golang:1.13
|
||||
commands:
|
||||
- go mod download
|
||||
- CGO_ENABLED=0 go build -ldflags "-w -s" .
|
||||
when:
|
||||
event:
|
||||
exclude:
|
||||
- tag
|
||||
|
||||
- name: go-build-1.14
|
||||
image: golang:1.14
|
||||
commands:
|
||||
- go mod download
|
||||
- CGO_ENABLED=0 go build -ldflags "-w -s" .
|
||||
when:
|
||||
event:
|
||||
exclude:
|
||||
- tag
|
||||
|
||||
- name: go-test
|
||||
image: golang:1.14
|
||||
commands:
|
||||
- go test -v ./...
|
||||
|
||||
- name: docker-release-tag
|
||||
image: plugins/docker
|
||||
settings:
|
||||
auto_tag: true
|
||||
username:
|
||||
from_secret: docker_username
|
||||
password:
|
||||
from_secret: docker_password
|
||||
repo: r.vmaple.dev/rpdata/logbot3
|
||||
registry: r.vmaple.dev
|
||||
when:
|
||||
event:
|
||||
- tag
|
||||
|
||||
- name: docker-release-latest
|
||||
image: plugins/docker
|
||||
settings:
|
||||
auto_tag: false
|
||||
username:
|
||||
from_secret: docker_username
|
||||
password:
|
||||
from_secret: docker_password
|
||||
repo: r.vmaple.dev/rpdata/logbot3
|
||||
registry: r.vmaple.dev
|
||||
when:
|
||||
event:
|
||||
- tag
|
||||
+3
-1
@@ -3,4 +3,6 @@ debug
|
||||
debug.exe
|
||||
logbot3
|
||||
logbot3.exe
|
||||
vendor/
|
||||
|
||||
# Idea
|
||||
/.idea
|
||||
|
||||
+7
-9
@@ -1,29 +1,27 @@
|
||||
## 1. Build Server
|
||||
# Use Go 1.11
|
||||
FROM golang:1.11 AS build
|
||||
# Use Go 1.14
|
||||
FROM golang:1.14 AS build
|
||||
|
||||
# Load repository into docker
|
||||
WORKDIR /go/src/git.aiterp.net/rpdata/logbot3/
|
||||
WORKDIR /project
|
||||
COPY . .
|
||||
RUN rm -rf ./vendor
|
||||
|
||||
# Load and run dependencies
|
||||
RUN go get -u github.com/golang/dep/cmd/dep
|
||||
RUN dep ensure
|
||||
RUN go get
|
||||
|
||||
# Build server and tools (CGO disabled to make them 100% static)
|
||||
ENV CGO_ENABLED 0
|
||||
RUN go build -a -installsuffix cgo -ldflags="-s -w" -o /binaries/logbot3 .
|
||||
RUN go build -a -installsuffix cgo -ldflags="-s -w" -o logbot3 .
|
||||
|
||||
## 2. Distribute
|
||||
# Use alpine linux
|
||||
FROM alpine:3.8 as main-dist
|
||||
FROM alpine:3.12 as main-dist
|
||||
|
||||
# Install certificates to enable HTTPS GET requests
|
||||
RUN apk add --no-cache ca-certificates
|
||||
|
||||
# Copy build files into final container
|
||||
COPY --from=build /binaries/* /usr/local/bin/
|
||||
COPY --from=build /project/logbot3 /usr/local/bin/
|
||||
|
||||
# The server is the main entry point
|
||||
CMD ["/usr/local/bin/logbot3"]
|
||||
|
||||
Generated
-26
@@ -1,26 +0,0 @@
|
||||
# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
|
||||
|
||||
|
||||
[[projects]]
|
||||
branch = "master"
|
||||
name = "git.aiterp.net/gisle/irc"
|
||||
packages = [
|
||||
".",
|
||||
"ircutil",
|
||||
"isupport",
|
||||
"list"
|
||||
]
|
||||
revision = "c1e97eb9d2e383147662ddd649fcab1bdaf295b4"
|
||||
|
||||
[[projects]]
|
||||
name = "github.com/dgrijalva/jwt-go"
|
||||
packages = ["."]
|
||||
revision = "06ea1031745cb8b3dab3f6a236daf2b0aa468b7e"
|
||||
version = "v3.2.0"
|
||||
|
||||
[solve-meta]
|
||||
analyzer-name = "dep"
|
||||
analyzer-version = 1
|
||||
inputs-digest = "7ef4c9d0736b7eb8e596036446cae5d12a8d7485db1559cfa8ade7ba1bf74263"
|
||||
solver-name = "gps-cdcl"
|
||||
solver-version = 1
|
||||
-38
@@ -1,38 +0,0 @@
|
||||
# Gopkg.toml example
|
||||
#
|
||||
# Refer to https://golang.github.io/dep/docs/Gopkg.toml.html
|
||||
# for detailed Gopkg.toml documentation.
|
||||
#
|
||||
# required = ["github.com/user/thing/cmd/thing"]
|
||||
# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"]
|
||||
#
|
||||
# [[constraint]]
|
||||
# name = "github.com/user/project"
|
||||
# version = "1.0.0"
|
||||
#
|
||||
# [[constraint]]
|
||||
# name = "github.com/user/project2"
|
||||
# branch = "dev"
|
||||
# source = "github.com/myfork/project2"
|
||||
#
|
||||
# [[override]]
|
||||
# name = "github.com/x/y"
|
||||
# version = "2.4.0"
|
||||
#
|
||||
# [prune]
|
||||
# non-go = false
|
||||
# go-tests = true
|
||||
# unused-packages = true
|
||||
|
||||
|
||||
[[constraint]]
|
||||
branch = "master"
|
||||
name = "git.aiterp.net/gisle/irc"
|
||||
|
||||
[[constraint]]
|
||||
name = "github.com/dgrijalva/jwt-go"
|
||||
version = "3.2.0"
|
||||
|
||||
[prune]
|
||||
go-tests = true
|
||||
unused-packages = true
|
||||
@@ -0,0 +1,8 @@
|
||||
module git.aiterp.net/rpdata/logbot3
|
||||
|
||||
go 1.13
|
||||
|
||||
require (
|
||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible
|
||||
github.com/gissleh/irc v0.0.0-20200720173331-512ba5aa6fca
|
||||
)
|
||||
@@ -0,0 +1,4 @@
|
||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
|
||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
||||
github.com/gissleh/irc v0.0.0-20200720173331-512ba5aa6fca h1:vTL3kM7PkVnTy77i2/ewaC0VDmSEF7sAOMDTNIs6rKY=
|
||||
github.com/gissleh/irc v0.0.0-20200720173331-512ba5aa6fca/go.mod h1:h2/fPlbnb11gFpitk0HGxYLgK+bCKGh55QSYNo36X8M=
|
||||
+12
-4
@@ -6,7 +6,7 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.aiterp.net/gisle/irc"
|
||||
"github.com/gissleh/irc"
|
||||
"git.aiterp.net/rpdata/logbot3/internal/models"
|
||||
"git.aiterp.net/rpdata/logbot3/internal/models/channels"
|
||||
)
|
||||
@@ -34,6 +34,8 @@ func New(ctx context.Context, nick string, alternatives []string, user string, r
|
||||
SkipSSLVerification: false,
|
||||
})
|
||||
|
||||
client.AddHandler(handler)
|
||||
|
||||
bot := &Bot{
|
||||
client: client,
|
||||
channels: make(map[string]*Channel),
|
||||
@@ -74,6 +76,10 @@ func (bot *Bot) Connect(server string, ssl bool, maxRetries int) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
func (bot *Bot) ClientState() irc.ClientState {
|
||||
return bot.client.State()
|
||||
}
|
||||
|
||||
func (bot *Bot) addChannel(channelName string) *Channel {
|
||||
if bot.channels[channelName] != nil {
|
||||
return bot.channels[channelName]
|
||||
@@ -154,12 +160,14 @@ func (bot *Bot) loop() {
|
||||
}
|
||||
}
|
||||
|
||||
if len(joins) > 0 {
|
||||
bot.client.Join(joins...)
|
||||
}
|
||||
if len(parts) > 0 {
|
||||
log.Println("Leaving", strings.Join(parts, ", "))
|
||||
bot.client.Part(parts...)
|
||||
}
|
||||
if len(joins) > 0 {
|
||||
log.Println("Joining", strings.Join(joins, ", "))
|
||||
bot.client.Join(joins...)
|
||||
}
|
||||
}
|
||||
|
||||
case <-bot.loopCtx.Done():
|
||||
|
||||
+23
-3
@@ -6,7 +6,7 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.aiterp.net/gisle/irc"
|
||||
"github.com/gissleh/irc"
|
||||
"git.aiterp.net/rpdata/logbot3/internal/config"
|
||||
"git.aiterp.net/rpdata/logbot3/internal/models/channels"
|
||||
"git.aiterp.net/rpdata/logbot3/internal/models/logs"
|
||||
@@ -85,8 +85,6 @@ func (channel *Channel) loop() {
|
||||
select {
|
||||
case post := <-channel.ch:
|
||||
{
|
||||
log.Printf("Received %s post from %s", post.Kind, post.Nick)
|
||||
|
||||
// Handle bot commands, or add to queue otherwise.
|
||||
if cmd := post.botCommand(); cmd != nil {
|
||||
switch cmd.Verb {
|
||||
@@ -128,6 +126,25 @@ func (channel *Channel) loop() {
|
||||
log.Println("Could not set event name:", err)
|
||||
}
|
||||
}
|
||||
case "register":
|
||||
{
|
||||
target := channel.client.Channel(channel.name)
|
||||
if target != nil {
|
||||
me, ok := target.UserList().User(channel.client.Nick())
|
||||
if !ok || !strings.ContainsRune(me.Modes, 'o') {
|
||||
channel.client.Say(channel.name, "This unit has insufficient privileges.")
|
||||
break
|
||||
}
|
||||
|
||||
chanServNick := config.Get().Names.ChanServ
|
||||
if chanServNick == "" {
|
||||
channel.client.Say(channel.name, "This function is not enabled.")
|
||||
break
|
||||
}
|
||||
|
||||
channel.client.Sayf(chanServNick, "REGISTER %s", target.Name())
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
queue = append(queue, post)
|
||||
@@ -137,6 +154,9 @@ func (channel *Channel) loop() {
|
||||
}
|
||||
}
|
||||
|
||||
// Posts after here aren't going to be bot commands, so log its reception.
|
||||
log.Printf("Received %s post from %s", post.Kind, post.Nick)
|
||||
|
||||
// Stop here if there's nothing to post.
|
||||
if len(queue) == 0 {
|
||||
break
|
||||
|
||||
@@ -5,10 +5,9 @@ import (
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"git.aiterp.net/rpdata/logbot3/internal/util"
|
||||
|
||||
"git.aiterp.net/gisle/irc"
|
||||
"github.com/gissleh/irc"
|
||||
"git.aiterp.net/rpdata/logbot3/internal/config"
|
||||
"git.aiterp.net/rpdata/logbot3/internal/util"
|
||||
)
|
||||
|
||||
func handler(event *irc.Event, client *irc.Client) {
|
||||
@@ -96,6 +95,12 @@ func handler(event *irc.Event, client *irc.Client) {
|
||||
text = util.RemoveNPCAttribution(event.Text)
|
||||
}
|
||||
|
||||
// Do not dispatch empty messages.
|
||||
if len(text) < 1 || len(nick) < 1 || len(kind) < 1 {
|
||||
log.Println("Ignoring empty message from:", event.Nick)
|
||||
break
|
||||
}
|
||||
|
||||
// Dispatch it.
|
||||
bot.handlePost(channel.Name(), ChannelPost{
|
||||
Account: account,
|
||||
@@ -134,6 +139,3 @@ func handler(event *irc.Event, client *irc.Client) {
|
||||
}
|
||||
}
|
||||
|
||||
func init() {
|
||||
irc.Handle(handler)
|
||||
}
|
||||
|
||||
@@ -14,10 +14,14 @@ type Config struct {
|
||||
User string `json:"user"`
|
||||
RealName string `json:"realName"`
|
||||
} `json:"bot"`
|
||||
Debug struct {
|
||||
Enabled bool `json:"enabled"`
|
||||
Listen string `json:"listen"`
|
||||
} `json:"debug"`
|
||||
Server struct {
|
||||
Address string `json:"server"`
|
||||
SSL bool `json:"ssl"`
|
||||
}
|
||||
} `json:"server"`
|
||||
API struct {
|
||||
Endpoint string `json:"endpoint"`
|
||||
Username string `json:"username"`
|
||||
@@ -29,7 +33,10 @@ type Config struct {
|
||||
Commands struct {
|
||||
OnJoinOp []string `json:"onJoinOp"`
|
||||
OnReady []string `json:"onReady"`
|
||||
}
|
||||
} `json:"commands"`
|
||||
Names struct {
|
||||
ChanServ string `json:"chanserv"`
|
||||
} `json:"names"`
|
||||
}
|
||||
|
||||
var mutex sync.Mutex
|
||||
|
||||
@@ -28,6 +28,10 @@ func TestRemoveNPCAttribution(t *testing.T) {
|
||||
Input: "((*Correction))",
|
||||
Output: "((*Correction))",
|
||||
},
|
||||
{
|
||||
Input: "((Remove :01 goofs!*))",
|
||||
Output: "((Remove :01 goofs!*))",
|
||||
},
|
||||
}
|
||||
|
||||
for i, row := range table {
|
||||
|
||||
@@ -2,7 +2,9 @@ package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/signal"
|
||||
"strings"
|
||||
@@ -10,7 +12,6 @@ import (
|
||||
|
||||
"git.aiterp.net/rpdata/logbot3/internal/bot"
|
||||
"git.aiterp.net/rpdata/logbot3/internal/config"
|
||||
|
||||
"git.aiterp.net/rpdata/logbot3/internal/models/users"
|
||||
)
|
||||
|
||||
@@ -32,6 +33,23 @@ func main() {
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if conf.Debug.Enabled {
|
||||
mux := http.NewServeMux()
|
||||
|
||||
mux.HandleFunc("/state", func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(200)
|
||||
_ = json.NewEncoder(w).Encode(bot.ClientState())
|
||||
})
|
||||
|
||||
go func() {
|
||||
err := http.ListenAndServe(conf.Debug.Listen, mux)
|
||||
if err != nil {
|
||||
log.Println("Failed to setup debug listener", err)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
// Listen for a quit signal.
|
||||
interrupt := make(chan os.Signal, 1)
|
||||
signal.Notify(interrupt, os.Interrupt)
|
||||
|
||||
Reference in New Issue
Block a user