yeet
This commit is contained in:
commit
19541281f2
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
.idea/
|
20
.gitlab-ci.yml
Normal file
20
.gitlab-ci.yml
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
image: docker:19.03.12
|
||||||
|
|
||||||
|
services:
|
||||||
|
- docker:19.03.12-dind
|
||||||
|
|
||||||
|
#variables:
|
||||||
|
# # Use TLS https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#tls-enabled
|
||||||
|
# DOCKER_HOST: tcp://docker:2376
|
||||||
|
# DOCKER_TLS_CERTDIR: "/certs"
|
||||||
|
|
||||||
|
before_script:
|
||||||
|
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
|
||||||
|
|
||||||
|
build:
|
||||||
|
stage: build
|
||||||
|
script:
|
||||||
|
- docker pull $CI_REGISTRY_IMAGE:latest || true
|
||||||
|
- docker build --cache-from $CI_REGISTRY_IMAGE:latest --tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA --tag $CI_REGISTRY_IMAGE:latest .
|
||||||
|
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
|
||||||
|
- docker push $CI_REGISTRY_IMAGE:latest
|
22
Dockerfile
Normal file
22
Dockerfile
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
FROM golang:alpine as golang
|
||||||
|
WORKDIR /go/src/app
|
||||||
|
COPY . .
|
||||||
|
# Static build required so that we can safely copy the binary over.
|
||||||
|
RUN CGO_ENABLED=0 go install -ldflags '-extldflags "-static"'
|
||||||
|
|
||||||
|
FROM alpine:latest as alpine
|
||||||
|
RUN apk --no-cache add tzdata zip ca-certificates
|
||||||
|
WORKDIR /usr/share/zoneinfo
|
||||||
|
# -0 means no compression. Needed because go's
|
||||||
|
# tz loader doesn't handle compressed data.
|
||||||
|
RUN zip -q -r -0 /zoneinfo.zip .
|
||||||
|
|
||||||
|
FROM scratch
|
||||||
|
# the program:
|
||||||
|
COPY --from=golang /go/bin/pinbot /app
|
||||||
|
# the timezone data:
|
||||||
|
ENV ZONEINFO /zoneinfo.zip
|
||||||
|
COPY --from=alpine /zoneinfo.zip /
|
||||||
|
# the tls certificates:
|
||||||
|
COPY --from=alpine /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
|
||||||
|
ENTRYPOINT ["/app"]
|
8
go.mod
Normal file
8
go.mod
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
module pinbot
|
||||||
|
|
||||||
|
go 1.15
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/bwmarrin/discordgo v0.22.0
|
||||||
|
github.com/joho/godotenv v1.3.0
|
||||||
|
)
|
8
go.sum
Normal file
8
go.sum
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
github.com/bwmarrin/discordgo v0.22.0 h1:uBxY1HmlVCsW1IuaPjpCGT6A2DBwRn0nvOguQIxDdFM=
|
||||||
|
github.com/bwmarrin/discordgo v0.22.0/go.mod h1:c1WtWUGN6nREDmzIpyTp/iD3VYt4Fpx+bVyfBG7JE+M=
|
||||||
|
github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
|
||||||
|
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||||
|
github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
|
||||||
|
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
|
||||||
|
golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16 h1:y6ce7gCWtnH+m3dCjzQ1PCuwl28DDIc3VNnvY29DlIA=
|
||||||
|
golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
79
main.go
Normal file
79
main.go
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/bwmarrin/discordgo"
|
||||||
|
"os"
|
||||||
|
"os/signal"
|
||||||
|
"syscall"
|
||||||
|
)
|
||||||
|
|
||||||
|
import _ "github.com/joho/godotenv/autoload"
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
token := os.Getenv("DISCORD_TOKEN")
|
||||||
|
if token == "" {
|
||||||
|
fmt.Println("Missing discord token (DISCORD_TOKEN), so bye bye!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
discord, err := discordgo.New("Bot " + token)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error creating Discord session: ", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
discord.AddHandler(ready)
|
||||||
|
discord.AddHandler(reactAdd)
|
||||||
|
discord.AddHandler(reactRemove)
|
||||||
|
|
||||||
|
err = discord.Open()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error opening Discord session: ", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wait here until CTRL-C or other term signal is received.
|
||||||
|
fmt.Println("PinBot is running! Press CTRL-C to exit.")
|
||||||
|
sc := make(chan os.Signal, 1)
|
||||||
|
signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt, os.Kill)
|
||||||
|
<-sc
|
||||||
|
|
||||||
|
// Cleanly close down the Discord session.
|
||||||
|
_ = discord.Close()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func ready(s *discordgo.Session, event *discordgo.Ready) {
|
||||||
|
_ = s.UpdateStatus(0, "5x📌 pins a message!")
|
||||||
|
}
|
||||||
|
|
||||||
|
func reactAdd(s *discordgo.Session, event *discordgo.MessageReactionAdd) {
|
||||||
|
messageReac(s, event.MessageReaction)
|
||||||
|
}
|
||||||
|
|
||||||
|
func reactRemove(s *discordgo.Session, event *discordgo.MessageReactionRemove) {
|
||||||
|
messageReac(s, event.MessageReaction)
|
||||||
|
}
|
||||||
|
|
||||||
|
func messageReac(s *discordgo.Session, event *discordgo.MessageReaction) {
|
||||||
|
if event.Emoji.Name == "📌" {
|
||||||
|
|
||||||
|
msg, err := s.ChannelMessage(event.ChannelID, event.MessageID)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, reaction := range msg.Reactions {
|
||||||
|
if reaction.Emoji.Name == "📌" {
|
||||||
|
var msgErr error
|
||||||
|
if reaction.Count >= 5 {
|
||||||
|
msgErr = s.ChannelMessagePin(event.ChannelID, event.MessageID)
|
||||||
|
} else if reaction.Count <= 3 {
|
||||||
|
msgErr = s.ChannelMessageUnpin(event.ChannelID, event.MessageID)
|
||||||
|
}
|
||||||
|
if msgErr != nil {
|
||||||
|
fmt.Println("Error: ", msgErr)
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue