Compare commits

..

31 Commits

Author SHA1 Message Date
Dustin Pianalto
13f80a6972 Add action to deploy to ECS after image is built
Some checks failed
CI / build (push) Has been cancelled
2020-10-11 22:23:05 -08:00
Dustin Pianalto
cadef92efb Add user to guild on user create 2020-10-09 23:43:56 -08:00
Dustin Pianalto
a93139fcf2 Attempt to insert user into db before creating tag 2020-10-09 23:21:35 -08:00
Dustin Pianalto
05d4096766 Change default prefix back for main 2020-10-09 21:46:28 -08:00
Dustin Pianalto
6a33cceebb Reorg and add services 2020-10-09 21:34:47 -08:00
Dustin Pianalto
5cd626a5a4 Merge branch 'development' of github.com:dustinpianalto/Goff into development 2020-09-23 12:05:05 -08:00
Dustin Pianalto
e2f25eaab4 Remove unnecessary rpn package
the rpn parser was moved to it's own repo and already imported in go.mod
2020-09-23 12:04:52 -08:00
Dusty.P
ea058baff5
Create README.md 2020-09-23 11:43:54 -08:00
Dustin Pianalto
d9e1efbaf0 Repo Reorg 2020-09-18 18:39:51 -08:00
Dustin Pianalto
af506f828d Change db variable name 2020-09-14 12:42:25 -08:00
Dustin Pianalto
5c42616a3a Adjust Connection Pool 2020-09-14 12:36:14 -08:00
Dustin Pianalto
6cc5e042d5 Start Restructure of project 2020-09-14 00:10:24 -08:00
Dustin Pianalto
4db28f5c0b Add sar and ping role when posting puzzle
Some checks failed
CI / build (push) Has been cancelled
2020-09-02 01:49:29 -08:00
Dustin Pianalto
fb4d7977aa Fix addtag removing newlines 2020-09-01 21:36:14 -08:00
Dustin Pianalto
30394b35e5 Merge branch 'master' into development
Some checks failed
CI / build (push) Has been cancelled
2020-08-30 21:53:25 -08:00
Dustin Pianalto
87961c5081 Remove branch check and also push latest tag 2020-08-30 17:57:19 -08:00
Dustin Pianalto
562ec6acaf Test github.ref to get branch name
Some checks failed
CI / build (push) Has been cancelled
2020-08-30 17:09:13 -08:00
Dustin Pianalto
3169953f3f Test github.ref to get branch name
Some checks failed
CI / build (push) Has been cancelled
2020-08-30 17:07:37 -08:00
Dustin Pianalto
d119425236 revert to previous method of getting branch name
Some checks failed
CI / build (push) Has been cancelled
2020-08-30 16:51:00 -08:00
Dustin Pianalto
ce1bbbc445 Check branch name 2020-08-30 16:46:05 -08:00
Dustin Pianalto
f4ec8a7a49 Fix globs
Some checks failed
CI / build (push) Has been cancelled
2020-08-30 16:19:35 -08:00
Dustin Pianalto
bec52ad5a5 Fix globs 2020-08-30 16:03:44 -08:00
Dustin Pianalto
5411730a96 Fix globs 2020-08-30 16:03:01 -08:00
Dustin Pianalto
187f9816ca Fix globs 2020-08-30 16:00:59 -08:00
Dustin Pianalto
feab8e661c Fix globs 2020-08-30 15:45:28 -08:00
Dustin Pianalto
96b63a4e83 Add action to build and push to ECR 2020-08-30 15:43:45 -08:00
Dustin Pianalto
fcddca2226 Delete old organization 2020-08-30 00:10:11 -08:00
Dustin Pianalto
28d78bdb8c Reorganize and update Dockerfile 2020-08-30 00:08:40 -08:00
Dusty.P
35882993c2
Update init.go 2020-08-29 18:42:38 -08:00
Dusty.P
85bcb31d56
Merge pull request #1 from dustinpianalto/development
Add Puzzle parser
2020-08-29 18:37:59 -08:00
Dusty.P
23c0434ed3
Merge branch 'master' into development 2020-08-29 18:27:47 -08:00
37 changed files with 132 additions and 810 deletions

View File

@ -1,6 +0,0 @@
.git
.github
.gitea
.env
.idea
goff

View File

@ -1,135 +0,0 @@
name: Build and Push Container
on:
push:
branches:
- master
- main
tags:
- v*
workflow_dispatch:
jobs:
build-and-push:
runs-on: ubuntu-latest
env:
REGISTRY: gitea.wayfinderak.com
IMAGE_NAME: gitea.wayfinderak.com/wayfinderak/goff
container:
options: --dns 172.16.30.10
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Go and Docker CLI if needed
shell: bash
run: |
set -euo pipefail
need_apt=0
need_apk=0
if ! command -v go >/dev/null 2>&1 || ! command -v docker >/dev/null 2>&1; then
if command -v apt-get >/dev/null 2>&1; then
need_apt=1
elif command -v apk >/dev/null 2>&1; then
need_apk=1
else
echo "No supported package manager found" >&2
exit 1
fi
fi
if [ "$need_apt" -eq 1 ]; then
apt-get update
if ! command -v go >/dev/null 2>&1; then
apt-get install -y golang-go
fi
if ! command -v docker >/dev/null 2>&1; then
apt-get install -y docker.io curl dnsutils iputils-ping
fi
fi
if [ "$need_apk" -eq 1 ]; then
if ! command -v go >/dev/null 2>&1; then
apk add --no-cache go
fi
if ! command -v docker >/dev/null 2>&1; then
apk add --no-cache docker-cli curl bind-tools iputils
fi
fi
go version
docker version
- name: Run tests
run: go test ./...
- name: Log in to Gitea Container Registry
shell: bash
run: |
set -euo pipefail
for attempt in 1 2 3; do
echo "docker login attempt $attempt"
if echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login "$REGISTRY" -u "${{ secrets.REGISTRY_USERNAME }}" --password-stdin; then
exit 0
fi
sleep 5
done
echo "docker login failed after 3 attempts" >&2
exit 1
- name: Determine image tags
id: meta
shell: bash
env:
REF: ${{ gitea.ref }}
REF_NAME: ${{ gitea.ref_name }}
SHA: ${{ gitea.sha }}
run: |
set -euo pipefail
tags=()
if [[ "$REF" == refs/tags/* ]]; then
version="$REF_NAME"
tags+=("$IMAGE_NAME:$version")
tags+=("$IMAGE_NAME:latest")
else
branch="$REF_NAME"
branch_safe="$(echo "$branch" | tr '/_' '--')"
sha_short="$(echo "$SHA" | cut -c1-7)"
tags+=("$IMAGE_NAME:$branch_safe")
tags+=("$IMAGE_NAME:$branch_safe-$sha_short")
if [[ "$branch" == "main" || "$branch" == "master" ]]; then
tags+=("$IMAGE_NAME:latest")
fi
fi
printf 'tags<<EOF\n' >> "$GITHUB_OUTPUT"
printf '%s\n' "${tags[@]}" >> "$GITHUB_OUTPUT"
printf 'EOF\n' >> "$GITHUB_OUTPUT"
- name: Build image
shell: bash
run: |
set -euo pipefail
mapfile -t tags <<'EOF'
${{ steps.meta.outputs.tags }}
EOF
build_args=()
for tag in "${tags[@]}"; do
build_args+=(--tag "$tag")
done
docker build "${build_args[@]}" .
- name: Push image
shell: bash
run: |
set -euo pipefail
while IFS= read -r tag; do
[ -n "$tag" ] || continue
docker push "$tag"
done <<'EOF'
${{ steps.meta.outputs.tags }}
EOF

View File

@ -1,64 +1,62 @@
name: Build and Push Container name: CI
# Controls when the action will run. Triggers the workflow on push to master or development
# with a tag like v1.0.0 or v1.0.0-dev
on: on:
push: push:
branches:
- master
- main
tags: tags:
- v* - v[0-9]+.[0-9]+.[0-9]+
workflow_dispatch: - v[0-9]+.[0-9]+.[0-9]+-[a-zA-Z]+
env:
REGISTRY: gitea.wayfinderak.com
IMAGE_NAME: wayfinderak/goff
jobs: jobs:
docker: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps: steps:
- name: Checkout # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
uses: actions/checkout@v4 - uses: actions/checkout@v2
- name: Set up QEMU - name: Configure AWS credentials
uses: docker/setup-qemu-action@v3 uses: aws-actions/configure-aws-credentials@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Gitea registry
uses: docker/login-action@v3
with: with:
registry: ${{ env.REGISTRY }} aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
username: ${{ secrets.REGISTRY_USERNAME }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
password: ${{ secrets.REGISTRY_PASSWORD }} aws-region: us-east-1
- name: Prepare image tags - name: Login to Amazon ECR
id: prep id: login-ecr
shell: bash uses: aws-actions/amazon-ecr-login@v1
- name: Get Version
id: get_version
uses: battila7/get-version-action@v2.0.0
- name: Build, tag, and push image to Amazon ECR
id: build-image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
ECR_REPOSITORY: goff
IMAGE_TAG: ${{ steps.get_version.outputs.version-without-v }}
run: | run: |
short_sha="${GITHUB_SHA::7}" docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
tags="${REGISTRY}/${IMAGE_NAME}:sha-${short_sha}" docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
docker tag $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG $ECR_REGISTRY/$ECR_REPOSITORY:latest
docker push $ECR_REGISTRY/$ECR_REPOSITORY:latest
echo "::set-output name=image::$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG"
if [[ "${GITHUB_REF_TYPE}" == "branch" && ("${GITHUB_REF_NAME}" == "master" || "${GITHUB_REF_NAME}" == "main") ]]; then - name: Fill in the new image ID in the Amazon ECS task definition
tags+=$'\n'"${REGISTRY}/${IMAGE_NAME}:latest" id: task-def
fi uses: aws-actions/amazon-ecs-render-task-definition@v1
if [[ "${GITHUB_REF_TYPE}" == "tag" ]]; then
version="${GITHUB_REF_NAME#v}"
tags+=$'\n'"${REGISTRY}/${IMAGE_NAME}:${version}"
fi
{
echo 'tags<<EOF'
echo "$tags"
echo 'EOF'
} >> "$GITHUB_OUTPUT"
- name: Build and push image
uses: docker/build-push-action@v6
with: with:
context: . task-definition: task-definition.json
push: true container-name: "goff"
platforms: linux/amd64,linux/arm64 image: ${{ steps.build-image.outputs.image }}
tags: ${{ steps.prep.outputs.tags }}
- name: Deploy Amazon ECS task definition
uses: aws-actions/amazon-ecs-deploy-task-definition@v1
with:
task-definition: ${{ steps.task-def.outputs.task-definition }}
service: "goff"
cluster: "discord-bots"
wait-for-service-stability: true

2
.gitignore vendored
View File

@ -1,4 +1,2 @@
.env .env
.idea .idea
portainer-app.env

View File

@ -1,18 +1,20 @@
FROM golang:1.22-alpine AS builder FROM golang:1.14-alpine as dev
WORKDIR /src WORKDIR /go/src/Goff
RUN apk add --no-cache ca-certificates git tzdata COPY ./go.mod .
COPY ./go.sum .
COPY go.mod go.sum ./
RUN go mod download RUN go mod download
COPY . . COPY . .
ARG TARGETARCH=amd64 RUN go install github.com/dustinpianalto/goff/...
RUN CGO_ENABLED=0 GOOS=linux GOARCH=$TARGETARCH go build -o /out/goff ./cmd/goff
FROM alpine:3.20 CMD [ "go", "run", "cmd/goff/main.go"]
RUN apk add --no-cache ca-certificates tzdata
COPY --from=builder /out/goff /usr/local/bin/goff from alpine
ENTRYPOINT ["/usr/local/bin/goff"] WORKDIR /bin
COPY --from=dev /go/bin/goff ./goff
CMD [ "goff" ]

View File

@ -1,26 +0,0 @@
# Portainer deployment notes
Generated from the current Kubernetes deployment in namespace `discord-bots`. Secret values are in the local `portainer-*.env` files.
## Kubernetes source
- Deployment: `goff`
- Replicas: `1`
- Rolling update: maxSurge `1`, maxUnavailable `1`
- minReadySeconds: `120`
- Labels/selectors: `app=goff`
- Image pull secrets: `none required for Portainer stack`
## Containers
- `pgbouncer`: image `timoha/pgbouncer:1.15.0`; env: DATABASE_URL, SERVER_TLS_SSLMODE, AUTH_TYPE; ports: 5432; requests: {'cpu': '500m', 'memory': '256Mi'}; limits: {'cpu': '1', 'memory': '512Mi'}
- `goff`: image `gitea.wayfinderak.com/wayfinderak/goff:latest`; env: DATABASE_URL, DISCORDGO_TOKEN, GOFF_EMAIL_USERNAME, GOFF_EMAIL_PASSWORD; ports: none; requests: {'cpu': '1', 'memory': '512Mi'}; limits: {'cpu': '2', 'memory': '1Gi'}
## Portainer files
- `portainer-stack.yml` - Docker Compose stack to paste/use in Portainer.
- `portainer-app.env` - bot runtime secrets/env.
## Portainer database connection
This Portainer stack does not include pgbouncer. `DATABASE_URL` in `portainer-app.env` points directly at the external PostgreSQL service copied from the Kubernetes pgbouncer upstream URL.

0
cmd/goff/main Normal file → Executable file
View File

View File

@ -4,15 +4,15 @@ import (
"fmt" "fmt"
"log" "log"
"gitea.wayfinderak.com/wayfinderak/goff/internal/exts"
"gitea.wayfinderak.com/wayfinderak/goff/internal/exts/guild_management"
"gitea.wayfinderak.com/wayfinderak/goff/internal/exts/logging"
"gitea.wayfinderak.com/wayfinderak/goff/internal/exts/tasks"
"gitea.wayfinderak.com/wayfinderak/goff/internal/exts/user_management"
"gitea.wayfinderak.com/wayfinderak/goff/internal/postgres"
"gitea.wayfinderak.com/wayfinderak/goff/internal/services"
"gitea.wayfinderak.com/wayfinderak/goff/pkg/email"
"github.com/dustinpianalto/disgoman" "github.com/dustinpianalto/disgoman"
"github.com/dustinpianalto/goff/internal/exts"
"github.com/dustinpianalto/goff/internal/exts/guild_management"
"github.com/dustinpianalto/goff/internal/exts/logging"
"github.com/dustinpianalto/goff/internal/exts/tasks"
"github.com/dustinpianalto/goff/internal/exts/user_management"
"github.com/dustinpianalto/goff/internal/postgres"
"github.com/dustinpianalto/goff/internal/services"
"github.com/dustinpianalto/goff/pkg/email"
//"github.com/MikeModder/anpan" //"github.com/MikeModder/anpan"
"os" "os"
@ -51,7 +51,6 @@ func main() {
us := &postgres.UserService{DB: postgres.DB} us := &postgres.UserService{DB: postgres.DB}
gs := &postgres.GuildService{DB: postgres.DB} gs := &postgres.GuildService{DB: postgres.DB}
rs := &postgres.RoleService{DB: postgres.DB}
//prefixes := []string{ //prefixes := []string{
// "Go.", // "Go.",
@ -72,7 +71,7 @@ func main() {
// Add Command Handlers // Add Command Handlers
exts.AddCommandHandlers(&manager) exts.AddCommandHandlers(&manager)
services.InitalizeServices(us, gs, rs) services.InitalizeServices(us, gs)
//if _, ok := handler.Commands["help"]; !ok { //if _, ok := handler.Commands["help"]; !ok {
// handler.AddDefaultHelpCommand() // handler.AddDefaultHelpCommand()
@ -83,10 +82,7 @@ func main() {
dg.AddHandler(guild_management.OnMessageUpdate) dg.AddHandler(guild_management.OnMessageUpdate)
dg.AddHandler(guild_management.OnMessageDelete) dg.AddHandler(guild_management.OnMessageDelete)
dg.AddHandler(user_management.OnGuildMemberAddLogging) dg.AddHandler(user_management.OnGuildMemberAddLogging)
dg.AddHandler(user_management.OnGuildMemberAdd)
dg.AddHandler(user_management.OnGuildMemberRemoveLogging) dg.AddHandler(user_management.OnGuildMemberRemoveLogging)
dg.AddHandler(user_management.OnGuildMemberRemove)
dg.AddHandler(user_management.OnGuildMemberUpdate)
err = dg.Open() err = dg.Open()
if err != nil { if err != nil {
@ -124,7 +120,6 @@ func getPrefixes(guildID string) []string {
log.Println(err) log.Println(err)
return []string{"Go.", "go."} return []string{"Go.", "go."}
} }
defer rows.Close()
var prefixes []string var prefixes []string
for rows.Next() { for rows.Next() {
var prefix string var prefix string

View File

@ -1,82 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: goff
namespace: discord-bots
labels:
app: goff
spec:
replicas: 1
selector:
matchLabels:
app: goff
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
minReadySeconds: 120
template:
metadata:
labels:
app: goff
spec:
containers:
- name: pgbouncer
image: timoha/pgbouncer:1.15.0
resources:
requests:
memory: "256Mi"
cpu: "0.5"
limits:
memory: "512Mi"
cpu: "1"
env:
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: goff
key: pgbouncer_url
- name: SERVER_TLS_SSLMODE
valueFrom:
secretKeyRef:
name: goff
key: pgbouncer_ssl
- name: AUTH_TYPE
valueFrom:
secretKeyRef:
name: goff
key: pgbouncer_auth
ports:
- containerPort: 5432
- name: goff
image: <IMAGE>
resources:
requests:
memory: "512Mi"
cpu: "1"
limits:
memory: "1Gi"
cpu: "2"
env:
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: goff
key: database_url
- name: DISCORDGO_TOKEN
valueFrom:
secretKeyRef:
name: goff
key: discord_token
- name: GOFF_EMAIL_USERNAME
valueFrom:
secretKeyRef:
name: goff
key: email_username
- name: GOFF_EMAIL_PASSWORD
valueFrom:
secretKeyRef:
name: goff
key: email_password
imagePullSecrets:
- name: registry-1

View File

@ -1,10 +0,0 @@
services:
goff:
image: ${IMAGE:-gitea.wayfinderak.com/wayfinderak/goff:${IMAGE_TAG:-latest}}
container_name: goff
restart: unless-stopped
environment:
DATABASE_URL: ${DATABASE_URL}
DISCORDGO_TOKEN: ${DISCORDGO_TOKEN}
GOFF_EMAIL_USERNAME: ${GOFF_EMAIL_USERNAME}
GOFF_EMAIL_PASSWORD: ${GOFF_EMAIL_PASSWORD}

18
go.mod
View File

@ -1,20 +1,14 @@
module gitea.wayfinderak.com/wayfinderak/goff module github.com/dustinpianalto/goff
go 1.14 go 1.14
require ( require (
github.com/AlekSi/pointer v1.1.0 // indirect github.com/bwmarrin/discordgo v0.22.0
github.com/bwmarrin/discordgo v0.23.2 github.com/dustinpianalto/disgoman v0.0.15
github.com/dustinpianalto/disgoman v0.0.21
github.com/dustinpianalto/rpnparse v1.0.1 github.com/dustinpianalto/rpnparse v1.0.1
github.com/emersion/go-imap v1.1.0 github.com/emersion/go-imap v1.0.5
github.com/emersion/go-message v0.15.0 github.com/emersion/go-message v0.12.0
github.com/gorilla/websocket v1.4.2 // indirect
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51
github.com/lib/pq v1.10.2 github.com/lib/pq v1.3.0
github.com/olebedev/when v0.0.0-20190311101825-c3b538a97254 github.com/olebedev/when v0.0.0-20190311101825-c3b538a97254
github.com/pkg/errors v0.9.1 // indirect
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 // indirect
golang.org/x/sys v0.0.0-20210818153620-00dd8d7831e7 // indirect
golang.org/x/text v0.3.7 // indirect
) )

37
go.sum
View File

@ -1,15 +1,11 @@
github.com/AlekSi/pointer v1.0.0 h1:KWCWzsvFxNLcmM5XmiqHsGTTsuwZMsLFwWF9Y+//bNE= github.com/AlekSi/pointer v1.0.0 h1:KWCWzsvFxNLcmM5XmiqHsGTTsuwZMsLFwWF9Y+//bNE=
github.com/AlekSi/pointer v1.0.0/go.mod h1:1kjywbfcPFCmncIxtk6fIEub6LKrfMz3gc5QKVOSOA8= github.com/AlekSi/pointer v1.0.0/go.mod h1:1kjywbfcPFCmncIxtk6fIEub6LKrfMz3gc5QKVOSOA8=
github.com/AlekSi/pointer v1.1.0 h1:SSDMPcXD9jSl8FPy9cRzoRaMJtm9g9ggGTxecRUbQoI=
github.com/AlekSi/pointer v1.1.0/go.mod h1:y7BvfRI3wXPWKXEBhU71nbnIEEZX0QTSB2Bj48UJIZE=
github.com/bwmarrin/discordgo v0.20.2 h1:nA7jiTtqUA9lT93WL2jPjUp8ZTEInRujBdx1C9gkr20= github.com/bwmarrin/discordgo v0.20.2 h1:nA7jiTtqUA9lT93WL2jPjUp8ZTEInRujBdx1C9gkr20=
github.com/bwmarrin/discordgo v0.20.2/go.mod h1:O9S4p+ofTFwB02em7jkpkV8M3R0/PUVOwN61zSZ0r4Q= github.com/bwmarrin/discordgo v0.20.2/go.mod h1:O9S4p+ofTFwB02em7jkpkV8M3R0/PUVOwN61zSZ0r4Q=
github.com/bwmarrin/discordgo v0.20.3-0.20200525154655-ca64123b05de h1:0TOVVwGrmv0PA+/vuekQIRY9jJ9rcHYnicIaph3/4S4= github.com/bwmarrin/discordgo v0.20.3-0.20200525154655-ca64123b05de h1:0TOVVwGrmv0PA+/vuekQIRY9jJ9rcHYnicIaph3/4S4=
github.com/bwmarrin/discordgo v0.20.3-0.20200525154655-ca64123b05de/go.mod h1:c1WtWUGN6nREDmzIpyTp/iD3VYt4Fpx+bVyfBG7JE+M= github.com/bwmarrin/discordgo v0.20.3-0.20200525154655-ca64123b05de/go.mod h1:c1WtWUGN6nREDmzIpyTp/iD3VYt4Fpx+bVyfBG7JE+M=
github.com/bwmarrin/discordgo v0.22.0 h1:uBxY1HmlVCsW1IuaPjpCGT6A2DBwRn0nvOguQIxDdFM= 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/bwmarrin/discordgo v0.22.0/go.mod h1:c1WtWUGN6nREDmzIpyTp/iD3VYt4Fpx+bVyfBG7JE+M=
github.com/bwmarrin/discordgo v0.23.2 h1:BzrtTktixGHIu9Tt7dEE6diysEF9HWnXeHuoJEt2fH4=
github.com/bwmarrin/discordgo v0.23.2/go.mod h1:c1WtWUGN6nREDmzIpyTp/iD3VYt4Fpx+bVyfBG7JE+M=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@ -21,48 +17,29 @@ github.com/dustinpianalto/disgoman v0.0.14 h1:hsk56JATBE5eH5GPCDGeiTdYxok4m+edSY
github.com/dustinpianalto/disgoman v0.0.14/go.mod h1:v3FM6n+4dH9XlvO+IDx6MN3DUnGq6YVDBvy1A1k202g= github.com/dustinpianalto/disgoman v0.0.14/go.mod h1:v3FM6n+4dH9XlvO+IDx6MN3DUnGq6YVDBvy1A1k202g=
github.com/dustinpianalto/disgoman v0.0.15 h1:kdIw6jhC82WBut7+4BarqxBw06dozU+Hu47LQzkkoGM= github.com/dustinpianalto/disgoman v0.0.15 h1:kdIw6jhC82WBut7+4BarqxBw06dozU+Hu47LQzkkoGM=
github.com/dustinpianalto/disgoman v0.0.15/go.mod h1:v3FM6n+4dH9XlvO+IDx6MN3DUnGq6YVDBvy1A1k202g= github.com/dustinpianalto/disgoman v0.0.15/go.mod h1:v3FM6n+4dH9XlvO+IDx6MN3DUnGq6YVDBvy1A1k202g=
github.com/dustinpianalto/disgoman v0.0.21 h1:GfT149ymB/7BAJaKn4DNB66zBAbSB1tdn3E26NGok0o=
github.com/dustinpianalto/disgoman v0.0.21/go.mod h1:v3FM6n+4dH9XlvO+IDx6MN3DUnGq6YVDBvy1A1k202g=
github.com/dustinpianalto/rpnparse v1.0.1 h1:ZvH1/RIe5hh3RGSAXOgtngEDHNPTF+DMh88XFWpQjzY= github.com/dustinpianalto/rpnparse v1.0.1 h1:ZvH1/RIe5hh3RGSAXOgtngEDHNPTF+DMh88XFWpQjzY=
github.com/dustinpianalto/rpnparse v1.0.1/go.mod h1:SzFbQb+Eed5gYCtDu/SYEXXwdPtWkDg9oaL1xQtN1BY= github.com/dustinpianalto/rpnparse v1.0.1/go.mod h1:SzFbQb+Eed5gYCtDu/SYEXXwdPtWkDg9oaL1xQtN1BY=
github.com/emersion/go-imap v1.0.5 h1:8xg/d2wo2BBP3AEP5AOaM/6i8887RGyVW2st/IVHWUw= github.com/emersion/go-imap v1.0.5 h1:8xg/d2wo2BBP3AEP5AOaM/6i8887RGyVW2st/IVHWUw=
github.com/emersion/go-imap v1.0.5/go.mod h1:yKASt+C3ZiDAiCSssxg9caIckWF/JG7ZQTO7GAmvicU= github.com/emersion/go-imap v1.0.5/go.mod h1:yKASt+C3ZiDAiCSssxg9caIckWF/JG7ZQTO7GAmvicU=
github.com/emersion/go-imap v1.1.0 h1:hAW8Dbi/AwiVO5Wi40FTVuCzVrTmwtEK6De9GSoOy+Y=
github.com/emersion/go-imap v1.1.0/go.mod h1:0hCeak4mA2z9hICM20jeqN6fyV0Oad0lZTyeeAyUS6o=
github.com/emersion/go-message v0.11.1/go.mod h1:C4jnca5HOTo4bGN9YdqNQM9sITuT3Y0K6bSUw9RklvY= github.com/emersion/go-message v0.11.1/go.mod h1:C4jnca5HOTo4bGN9YdqNQM9sITuT3Y0K6bSUw9RklvY=
github.com/emersion/go-message v0.12.0 h1:mZnv35eZ6lB6EftTQBgYXspOH0FQdhpFhSUhA9i6/Zg= github.com/emersion/go-message v0.12.0 h1:mZnv35eZ6lB6EftTQBgYXspOH0FQdhpFhSUhA9i6/Zg=
github.com/emersion/go-message v0.12.0/go.mod h1:C4jnca5HOTo4bGN9YdqNQM9sITuT3Y0K6bSUw9RklvY= github.com/emersion/go-message v0.12.0/go.mod h1:C4jnca5HOTo4bGN9YdqNQM9sITuT3Y0K6bSUw9RklvY=
github.com/emersion/go-message v0.14.1/go.mod h1:N1JWdZQ2WRUalmdHAX308CWBq747VJ8oUorFI3VCBwU=
github.com/emersion/go-message v0.15.0 h1:urgKGqt2JAc9NFJcgncQcohHdiYb803YTH9OQwHBHIY=
github.com/emersion/go-message v0.15.0/go.mod h1:wQUEfE+38+7EW8p8aZ96ptg6bAb1iwdgej19uXASlE4=
github.com/emersion/go-sasl v0.0.0-20191210011802-430746ea8b9b h1:uhWtEWBHgop1rqEk2klKaxPAkVDCXexai6hSuRQ7Nvs= github.com/emersion/go-sasl v0.0.0-20191210011802-430746ea8b9b h1:uhWtEWBHgop1rqEk2klKaxPAkVDCXexai6hSuRQ7Nvs=
github.com/emersion/go-sasl v0.0.0-20191210011802-430746ea8b9b/go.mod h1:G/dpzLu16WtQpBfQ/z3LYiYJn3ZhKSGWn83fyoyQe/k= github.com/emersion/go-sasl v0.0.0-20191210011802-430746ea8b9b/go.mod h1:G/dpzLu16WtQpBfQ/z3LYiYJn3ZhKSGWn83fyoyQe/k=
github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21 h1:OJyUGMJTzHTd1XQp98QTaHernxMYzRaOasRir9hUlFQ=
github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21/go.mod h1:iL2twTeMvZnrg54ZoPDNfJaJaqy0xIQFuBdrLsmspwQ=
github.com/emersion/go-textwrapper v0.0.0-20160606182133-d0e65e56babe h1:40SWqY0zE3qCi6ZrtTf5OUdNm5lDnGnjRSq9GgmeTrg= github.com/emersion/go-textwrapper v0.0.0-20160606182133-d0e65e56babe h1:40SWqY0zE3qCi6ZrtTf5OUdNm5lDnGnjRSq9GgmeTrg=
github.com/emersion/go-textwrapper v0.0.0-20160606182133-d0e65e56babe/go.mod h1:aqO8z8wPrjkscevZJFVE1wXJrLpC5LtJG7fqLOsPb2U= github.com/emersion/go-textwrapper v0.0.0-20160606182133-d0e65e56babe/go.mod h1:aqO8z8wPrjkscevZJFVE1wXJrLpC5LtJG7fqLOsPb2U=
github.com/emersion/go-textwrapper v0.0.0-20200911093747-65d896831594 h1:IbFBtwoTQyw0fIM5xv1HF+Y+3ZijDR839WMulgxCcUY=
github.com/emersion/go-textwrapper v0.0.0-20200911093747-65d896831594/go.mod h1:aqO8z8wPrjkscevZJFVE1wXJrLpC5LtJG7fqLOsPb2U=
github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= 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/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/lib/pq v1.3.0 h1:/qkRGz8zljWiDcFvgpwUpwIAPu3r07TDvs3Rws+o/pU= github.com/lib/pq v1.3.0 h1:/qkRGz8zljWiDcFvgpwUpwIAPu3r07TDvs3Rws+o/pU=
github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.10.2 h1:AqzbZs4ZoCBp+GtejcpCpcxM3zlSMx29dXbUSeVtJb8=
github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/martinlindhe/base36 v1.0.0 h1:eYsumTah144C0A8P1T/AVSUk5ZoLnhfYFM3OGQxB52A= github.com/martinlindhe/base36 v1.0.0 h1:eYsumTah144C0A8P1T/AVSUk5ZoLnhfYFM3OGQxB52A=
github.com/martinlindhe/base36 v1.0.0/go.mod h1:+AtEs8xrBpCeYgSLoY/aJ6Wf37jtBuR0s35750M27+8= github.com/martinlindhe/base36 v1.0.0/go.mod h1:+AtEs8xrBpCeYgSLoY/aJ6Wf37jtBuR0s35750M27+8=
github.com/martinlindhe/base36 v1.1.0 h1:cIwvvwYse/0+1CkUPYH5ZvVIYG3JrILmQEIbLuar02Y=
github.com/martinlindhe/base36 v1.1.0/go.mod h1:+AtEs8xrBpCeYgSLoY/aJ6Wf37jtBuR0s35750M27+8=
github.com/olebedev/when v0.0.0-20190311101825-c3b538a97254 h1:JYoQR67E1vv1WGoeW8DkdFs7vrIEe/5wP+qJItd5tUE= github.com/olebedev/when v0.0.0-20190311101825-c3b538a97254 h1:JYoQR67E1vv1WGoeW8DkdFs7vrIEe/5wP+qJItd5tUE=
github.com/olebedev/when v0.0.0-20190311101825-c3b538a97254/go.mod h1:DPucAeQGDPUzYUt+NaWw6qsF5SFapWWToxEiVDh2aV0= github.com/olebedev/when v0.0.0-20190311101825-c3b538a97254/go.mod h1:DPucAeQGDPUzYUt+NaWw6qsF5SFapWWToxEiVDh2aV0=
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@ -70,20 +47,6 @@ github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16 h1:y6ce7gCWtnH+m3dCjzQ1PCuwl28DDIc3VNnvY29DlIA= 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= golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ=
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210818153620-00dd8d7831e7 h1:/bmDWM82ZX7TawqxuI8kVjKI0TXHdSY6pHJArewwHtU=
golang.org/x/sys v0.0.0-20210818153620-00dd8d7831e7/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.5-0.20201125200606-c27b9fd57aec/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=

View File

@ -32,7 +32,7 @@ func ParseDateString(inTime time.Time) string {
} else { } else {
dateString = "Now" dateString = "Now"
} }
stamp := inTime.Format("2006-01-02 15:04:05.000") stamp := inTime.Format("2006-01-02 15:04:05")
return fmt.Sprintf("%v\n%v", dateString, stamp) return fmt.Sprintf("%v\n%v", dateString, stamp)
} }

View File

@ -19,10 +19,7 @@ func ParseSnowflake(s int64) Snowflake {
PROCESS_ID_MASK = 0x1F000 PROCESS_ID_MASK = 0x1F000
INCREMENT_MASK = 0xFFF INCREMENT_MASK = 0xFFF
) )
t := (s >> TIME_BITS_LOC) + DISCORD_EPOCH creationTime := time.Unix(((s>>TIME_BITS_LOC)+DISCORD_EPOCH)/1000.0, 0)
sec := t / 1000.0
nano := t % 1000.0 * 1000000.0
creationTime := time.Unix(sec, nano)
workerID := (s & WORKER_ID_MASK) >> WORKER_ID_LOC workerID := (s & WORKER_ID_MASK) >> WORKER_ID_LOC
processID := (s & PROCESS_ID_MASK) >> PROCESS_ID_LOC processID := (s & PROCESS_ID_MASK) >> PROCESS_ID_LOC
increment := s & INCREMENT_MASK increment := s & INCREMENT_MASK

View File

@ -6,8 +6,8 @@ import (
"strings" "strings"
"github.com/dustinpianalto/disgoman" "github.com/dustinpianalto/disgoman"
"gitea.wayfinderak.com/wayfinderak/goff/internal/postgres" "github.com/dustinpianalto/goff/internal/postgres"
"gitea.wayfinderak.com/wayfinderak/goff/internal/services" "github.com/dustinpianalto/goff/internal/services"
) )
// Guild management commands // Guild management commands

View File

@ -5,7 +5,7 @@ import (
"log" "log"
"github.com/bwmarrin/discordgo" "github.com/bwmarrin/discordgo"
"gitea.wayfinderak.com/wayfinderak/goff/internal/postgres" "github.com/dustinpianalto/goff/internal/postgres"
) )
func OnMessageUpdate(session *discordgo.Session, m *discordgo.MessageUpdate) { func OnMessageUpdate(session *discordgo.Session, m *discordgo.MessageUpdate) {
@ -29,9 +29,6 @@ func OnMessageUpdate(session *discordgo.Session, m *discordgo.MessageUpdate) {
log.Println(err) log.Println(err)
return return
} }
if m.Content == "" {
return
}
embed := &discordgo.MessageEmbed{ embed := &discordgo.MessageEmbed{
Title: fmt.Sprintf("Message Edited: %v", msg.ID), Title: fmt.Sprintf("Message Edited: %v", msg.ID),
Description: fmt.Sprintf("**Before:** %v\n**After:** %v\nIn Channel: %v", msg.Content, m.Content, channel.Mention()), Description: fmt.Sprintf("**Before:** %v\n**After:** %v\nIn Channel: %v", msg.Content, m.Content, channel.Mention()),

View File

@ -2,15 +2,15 @@ package exts
import ( import (
"github.com/dustinpianalto/disgoman" "github.com/dustinpianalto/disgoman"
"gitea.wayfinderak.com/wayfinderak/goff/internal/exts/fun" "github.com/dustinpianalto/goff/internal/exts/fun"
"gitea.wayfinderak.com/wayfinderak/goff/internal/exts/guild_management" "github.com/dustinpianalto/goff/internal/exts/guild_management"
"gitea.wayfinderak.com/wayfinderak/goff/internal/exts/roles" "github.com/dustinpianalto/goff/internal/exts/roles"
"gitea.wayfinderak.com/wayfinderak/goff/internal/exts/tags" "github.com/dustinpianalto/goff/internal/exts/tags"
"gitea.wayfinderak.com/wayfinderak/goff/internal/exts/tasks" "github.com/dustinpianalto/goff/internal/exts/tasks"
"gitea.wayfinderak.com/wayfinderak/goff/internal/exts/user_management" "github.com/dustinpianalto/goff/internal/exts/user_management"
"gitea.wayfinderak.com/wayfinderak/goff/internal/exts/utils" "github.com/dustinpianalto/goff/internal/exts/utils"
"gitea.wayfinderak.com/wayfinderak/goff/internal/exts/p_interpreter" "github.com/dustinpianalto/goff/internal/exts/p_interpreter"
) )
func AddCommandHandlers(h *disgoman.CommandManager) { func AddCommandHandlers(h *disgoman.CommandManager) {
@ -27,7 +27,6 @@ func AddCommandHandlers(h *disgoman.CommandManager) {
_ = h.AddCommand(utils.GitCommand) _ = h.AddCommand(utils.GitCommand)
_ = h.AddCommand(utils.InviteCommand) _ = h.AddCommand(utils.InviteCommand)
_ = h.AddCommand(utils.PingCommand) _ = h.AddCommand(utils.PingCommand)
_ = h.AddCommand(utils.SnowflakeCommand)
_ = h.AddCommand(tasks.AddReminderCommand) _ = h.AddCommand(tasks.AddReminderCommand)
_ = h.AddCommand(tags.AddTagCommand) _ = h.AddCommand(tags.AddTagCommand)
_ = h.AddCommand(tags.TagCommand) _ = h.AddCommand(tags.TagCommand)
@ -35,8 +34,6 @@ func AddCommandHandlers(h *disgoman.CommandManager) {
_ = h.AddCommand(roles.RemoveSelfAssignableCommand) _ = h.AddCommand(roles.RemoveSelfAssignableCommand)
_ = h.AddCommand(roles.SelfAssignRoleCommand) _ = h.AddCommand(roles.SelfAssignRoleCommand)
_ = h.AddCommand(roles.UnAssignRoleCommand) _ = h.AddCommand(roles.UnAssignRoleCommand)
_ = h.AddCommand(roles.MakeAutoRoleCommand)
_ = h.AddCommand(roles.RemoveAutoRoleCommand)
_ = h.AddCommand(p_interpreter.PCommand) _ = h.AddCommand(p_interpreter.PCommand)
_ = h.AddCommand(fun.InterleaveCommand) _ = h.AddCommand(fun.InterleaveCommand)
_ = h.AddCommand(fun.DeinterleaveCommand) _ = h.AddCommand(fun.DeinterleaveCommand)

View File

@ -4,7 +4,7 @@ import (
"fmt" "fmt"
"github.com/bwmarrin/discordgo" "github.com/bwmarrin/discordgo"
"gitea.wayfinderak.com/wayfinderak/goff/internal/postgres" "github.com/dustinpianalto/goff/internal/postgres"
) )
var LoggingChannel = make(chan *LogEvent, 10) var LoggingChannel = make(chan *LogEvent, 10)

View File

@ -7,9 +7,7 @@ import (
"github.com/bwmarrin/discordgo" "github.com/bwmarrin/discordgo"
"github.com/dustinpianalto/disgoman" "github.com/dustinpianalto/disgoman"
"gitea.wayfinderak.com/wayfinderak/goff" "github.com/dustinpianalto/goff/internal/postgres"
"gitea.wayfinderak.com/wayfinderak/goff/internal/postgres"
"gitea.wayfinderak.com/wayfinderak/goff/internal/services"
) )
var MakeRoleSelfAssignableCommand = &disgoman.Command{ var MakeRoleSelfAssignableCommand = &disgoman.Command{
@ -256,134 +254,3 @@ func memberHasRole(m *discordgo.Member, id string) bool {
} }
return false return false
} }
var MakeAutoRoleCommand = &disgoman.Command{
Name: "make-auto-role",
Aliases: []string{"makear"},
Description: "Marks the passed in role to auto add to new members.",
OwnerOnly: false,
Hidden: false,
RequiredPermissions: disgoman.PermissionManageServer,
Invoke: makeAutoRoleCommandFunc,
}
func makeAutoRoleCommandFunc(ctx disgoman.Context, args []string) {
var roleString string
var roleID string
if len(args) > 0 {
roleString = strings.Join(args, " ")
if strings.HasPrefix(roleString, "<@&") && strings.HasSuffix(roleString, ">") {
roleID = roleString[3 : len(roleString)-1]
} else if _, err := strconv.Atoi(roleString); err == nil {
roleID = roleString
} else {
for _, role := range ctx.Guild.Roles {
if roleString == role.Name {
roleID = role.ID
}
}
}
}
fmt.Println(roleID)
var r *discordgo.Role
var err error
if r, err = ctx.Session.State.Role(ctx.Guild.ID, roleID); err != nil {
ctx.CommandManager.ErrorChannel <- disgoman.CommandError{
Context: ctx,
Message: "Can't find that Role.",
Error: err,
}
return
}
role, err := services.RoleService.Role(r.ID)
if err != nil {
role = &goff.Role{
ID: r.ID,
IsModerator: false,
IsAdmin: false,
SelfAssignable: false,
AutoRole: true,
Guild: ctx.Guild.ID,
}
role, err = services.RoleService.AddRole(role)
if err != nil {
ctx.CommandManager.ErrorChannel <- disgoman.CommandError{
Context: ctx,
Message: "Error making an Auto Role",
Error: err,
}
return
}
} else {
err = services.RoleService.MakeAutoRole(role)
if err != nil {
ctx.CommandManager.ErrorChannel <- disgoman.CommandError{
Context: ctx,
Message: "Error making an Auto Role",
Error: err,
}
return
}
}
_, _ = ctx.Send(fmt.Sprintf("%s will be added to all new memebers.", r.Name))
}
var RemoveAutoRoleCommand = &disgoman.Command{
Name: "remove-auto-role",
Aliases: []string{"removear"},
Description: "Remove role from those added to new members.",
OwnerOnly: false,
Hidden: false,
RequiredPermissions: disgoman.PermissionManageServer,
Invoke: removeAutoRoleCommandFunc,
}
func removeAutoRoleCommandFunc(ctx disgoman.Context, args []string) {
var roleString string
var roleID string
if len(args) > 0 {
roleString = strings.Join(args, " ")
if strings.HasPrefix(roleString, "<@&") && strings.HasSuffix(roleString, ">") {
roleID = roleString[3 : len(roleString)-1]
} else if _, err := strconv.Atoi(roleString); err == nil {
roleID = roleString
} else {
for _, role := range ctx.Guild.Roles {
if roleString == role.Name {
roleID = role.ID
}
}
}
}
fmt.Println(roleID)
var r *discordgo.Role
var err error
if r, err = ctx.Session.State.Role(ctx.Guild.ID, roleID); err != nil {
ctx.CommandManager.ErrorChannel <- disgoman.CommandError{
Context: ctx,
Message: "Can't find that Role.",
Error: err,
}
return
}
role, err := services.RoleService.Role(r.ID)
if err != nil {
ctx.CommandManager.ErrorChannel <- disgoman.CommandError{
Context: ctx,
Message: "Role was not configured as an Auto Role",
Error: err,
}
return
} else {
err = services.RoleService.RemoveAutoRole(role)
if err != nil {
ctx.CommandManager.ErrorChannel <- disgoman.CommandError{
Context: ctx,
Message: "Error removing Auto Role",
Error: err,
}
return
}
}
_, _ = ctx.Send(fmt.Sprintf("%s will no longer be added to all new memebers.", r.Name))
}

View File

@ -7,9 +7,9 @@ import (
"strings" "strings"
"github.com/dustinpianalto/disgoman" "github.com/dustinpianalto/disgoman"
"gitea.wayfinderak.com/wayfinderak/goff" "github.com/dustinpianalto/goff"
"gitea.wayfinderak.com/wayfinderak/goff/internal/postgres" "github.com/dustinpianalto/goff/internal/postgres"
"gitea.wayfinderak.com/wayfinderak/goff/internal/services" "github.com/dustinpianalto/goff/internal/services"
) )
var AddTagCommand = &disgoman.Command{ var AddTagCommand = &disgoman.Command{

View File

@ -6,7 +6,7 @@ import (
"time" "time"
"github.com/bwmarrin/discordgo" "github.com/bwmarrin/discordgo"
"gitea.wayfinderak.com/wayfinderak/goff/internal/postgres" "github.com/dustinpianalto/goff/internal/postgres"
) )
type Task struct { type Task struct {
@ -100,7 +100,6 @@ func getTasksToRun() []Task {
res, err := postgres.DB.Query(query, time.Now()) res, err := postgres.DB.Query(query, time.Now())
if err != nil { if err != nil {
log.Println(err) log.Println(err)
return nil
} }
var tasks []Task var tasks []Task
for res.Next() { for res.Next() {

View File

@ -7,7 +7,7 @@ import (
"time" "time"
"github.com/dustinpianalto/disgoman" "github.com/dustinpianalto/disgoman"
"gitea.wayfinderak.com/wayfinderak/goff/internal/postgres" "github.com/dustinpianalto/goff/internal/postgres"
"github.com/olebedev/when" "github.com/olebedev/when"
"github.com/olebedev/when/rules/common" "github.com/olebedev/when/rules/common"
"github.com/olebedev/when/rules/en" "github.com/olebedev/when/rules/en"

View File

@ -4,8 +4,8 @@ import (
"log" "log"
"github.com/bwmarrin/discordgo" "github.com/bwmarrin/discordgo"
"gitea.wayfinderak.com/wayfinderak/goff" "github.com/dustinpianalto/goff"
"gitea.wayfinderak.com/wayfinderak/goff/internal/services" "github.com/dustinpianalto/goff/internal/services"
) )
func OnGuildMemberAdd(s *discordgo.Session, member *discordgo.GuildMemberAdd) { func OnGuildMemberAdd(s *discordgo.Session, member *discordgo.GuildMemberAdd) {
@ -41,25 +41,6 @@ func OnGuildMemberAdd(s *discordgo.Session, member *discordgo.GuildMemberAdd) {
if err != nil { if err != nil {
log.Println("Error adding user to guild: ", err) log.Println("Error adding user to guild: ", err)
} }
if !member.Member.Pending {
roles, err := services.RoleService.GetAutoRoles(member.GuildID)
if err != nil {
log.Println("Error getting Auto Join Roles: ", err)
}
log.Println(roles)
for _, r := range roles {
role, err := s.State.Role(member.GuildID, r.ID)
if err != nil {
log.Println("Error getting role: ", err)
continue
}
err = s.GuildMemberRoleAdd(member.GuildID, member.User.ID, role.ID)
if err != nil {
log.Println("Error adding Role to member: ", err)
continue
}
}
}
} }
func OnGuildMemberRemove(s *discordgo.Session, member *discordgo.GuildMemberRemove) { func OnGuildMemberRemove(s *discordgo.Session, member *discordgo.GuildMemberRemove) {
@ -90,30 +71,3 @@ func OnGuildMemberRemove(s *discordgo.Session, member *discordgo.GuildMemberRemo
} }
} }
} }
func OnGuildMemberUpdate(s *discordgo.Session, member *discordgo.GuildMemberUpdate) {
defer func() {
if r := recover(); r != nil {
log.Println("Recovered from panic in OnGuildMemberUpdate: ", r)
}
}()
if !member.Member.Pending {
roles, err := services.RoleService.GetAutoRoles(member.GuildID)
if err != nil {
log.Println("Error getting Auto Join Roles: ", err)
}
log.Println(roles)
for _, r := range roles {
role, err := s.State.Role(member.GuildID, r.ID)
if err != nil {
log.Println("Error getting role: ", err)
continue
}
err = s.GuildMemberRoleAdd(member.GuildID, member.User.ID, role.ID)
if err != nil {
log.Println("Error adding Role to member: ", err)
continue
}
}
}
}

View File

@ -7,8 +7,8 @@ import (
"time" "time"
"github.com/bwmarrin/discordgo" "github.com/bwmarrin/discordgo"
"gitea.wayfinderak.com/wayfinderak/goff/internal/discord_utils" "github.com/dustinpianalto/goff/internal/discord_utils"
"gitea.wayfinderak.com/wayfinderak/goff/internal/postgres" "github.com/dustinpianalto/goff/internal/postgres"
) )
func OnGuildMemberAddLogging(s *discordgo.Session, member *discordgo.GuildMemberAdd) { func OnGuildMemberAddLogging(s *discordgo.Session, member *discordgo.GuildMemberAdd) {
@ -163,4 +163,5 @@ func MarkMemberInactive(s *discordgo.Session, m *discordgo.GuildMemberRemove) {
log.Println(fmt.Errorf("error marking %s as inactive: %w", m.User.ID, err)) log.Println(fmt.Errorf("error marking %s as inactive: %w", m.User.ID, err))
return return
} }
log.Println("User left: %s")
} }

View File

@ -8,7 +8,7 @@ import (
"github.com/bwmarrin/discordgo" "github.com/bwmarrin/discordgo"
"github.com/dustinpianalto/disgoman" "github.com/dustinpianalto/disgoman"
"gitea.wayfinderak.com/wayfinderak/goff/internal/exts/logging" "github.com/dustinpianalto/goff/internal/exts/logging"
) )
var KickUserCommand = &disgoman.Command{ var KickUserCommand = &disgoman.Command{

View File

@ -9,7 +9,7 @@ import (
"github.com/bwmarrin/discordgo" "github.com/bwmarrin/discordgo"
"github.com/dustinpianalto/disgoman" "github.com/dustinpianalto/disgoman"
"gitea.wayfinderak.com/wayfinderak/goff/internal/discord_utils" "github.com/dustinpianalto/goff/internal/discord_utils"
) )
var PingCommand = &disgoman.Command{ var PingCommand = &disgoman.Command{
@ -80,9 +80,9 @@ var GitCommand = &disgoman.Command{
func gitCommandFunc(ctx disgoman.Context, _ []string) { func gitCommandFunc(ctx disgoman.Context, _ []string) {
embed := &discordgo.MessageEmbed{ embed := &discordgo.MessageEmbed{
Title: "Hi there, my code is on Gitea", Title: "Hi there, My code is on Github",
Color: 0, Color: 0,
URL: "https://gitea.wayfinderak.com/wayfinderak/goff", URL: "https://github.com/dustinpianalto/Goff",
} }
_, err := ctx.Session.ChannelMessageSendEmbed(ctx.Channel.ID, embed) _, err := ctx.Session.ChannelMessageSendEmbed(ctx.Channel.ID, embed)
if err != nil { if err != nil {
@ -218,32 +218,3 @@ func userCommandFunc(ctx disgoman.Context, args []string) {
} }
} }
} }
var SnowflakeCommand = &disgoman.Command{
Name: "s",
Aliases: nil,
Description: "Return the parts of a snowflake",
OwnerOnly: false,
Hidden: false,
RequiredPermissions: 0,
SanitizeEveryone: true,
Invoke: snowflakeCommandFunc,
}
func snowflakeCommandFunc(ctx disgoman.Context, args []string) {
int64ID, err := strconv.ParseInt(args[0], 10, 64)
if err != nil {
ctx.CommandManager.ErrorChannel <- disgoman.CommandError{
Context: ctx,
Message: "Not a valid ID",
Error: err,
}
return
}
s := discord_utils.ParseSnowflake(int64ID)
embed := &discordgo.MessageEmbed{
Title: args[0],
Description: fmt.Sprintf("Created: %s\nWorker: %d\nProcess: %d\nCounter: %d", discord_utils.ParseDateString(s.CreationTime), s.WorkerID, s.ProcessID, s.Increment),
}
_, _ = ctx.Session.ChannelMessageSendEmbed(ctx.Channel.ID, embed)
}

View File

@ -4,7 +4,6 @@ import (
"database/sql" "database/sql"
"fmt" "fmt"
"log" "log"
"time"
_ "github.com/lib/pq" _ "github.com/lib/pq"
) )
@ -17,23 +16,17 @@ func ConnectDatabase(dbConnString string) {
db, err := sql.Open("postgres", dbConnString) db, err := sql.Open("postgres", dbConnString)
if err != nil { if err != nil {
panic(fmt.Sprintf("Can't connect to the database. %v", err)) panic(fmt.Sprintf("Can't connect to the database. %v", err))
} else {
fmt.Println("Database Connected.")
} }
db.SetMaxOpenConns(75) // The RDS instance has a max of 75 open connections
db.SetMaxOpenConns(5) db.SetMaxIdleConns(5)
db.SetMaxIdleConns(2) db.SetConnMaxLifetime(300)
db.SetConnMaxLifetime(30 * time.Minute)
db.SetConnMaxIdleTime(5 * time.Minute)
if err = db.Ping(); err != nil {
panic(fmt.Sprintf("Can't ping the database. %v", err))
}
fmt.Println("Database Connected.")
DB = db DB = db
} }
func InitializeDatabase() { func InitializeDatabase() {
_, err := DB.Exec("CREATE TABLE IF NOT EXISTS users(" + _, err := DB.Query("CREATE TABLE IF NOT EXISTS users(" +
"id varchar(30) primary key," + "id varchar(30) primary key," +
"banned bool not null default false," + "banned bool not null default false," +
"logging bool not null default true," + "logging bool not null default true," +
@ -45,7 +38,7 @@ func InitializeDatabase() {
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
_, err = DB.Exec("CREATE TABLE IF NOT EXISTS guilds(" + _, err = DB.Query("CREATE TABLE IF NOT EXISTS guilds(" +
"id varchar(30) primary key," + "id varchar(30) primary key," +
"welcome_message varchar(1000) NOT NULL DEFAULT ''," + "welcome_message varchar(1000) NOT NULL DEFAULT ''," +
"goodbye_message varchar(1000) NOT NULL DEFAULT ''," + "goodbye_message varchar(1000) NOT NULL DEFAULT ''," +
@ -55,14 +48,14 @@ func InitializeDatabase() {
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
_, err = DB.Exec("CREATE TABLE IF NOT EXISTS prefixes(" + _, err = DB.Query("CREATE TABLE IF NOT EXISTS prefixes(" +
"id serial primary key," + "id serial primary key," +
"prefix varchar(10) not null unique default 'Go.'" + "prefix varchar(10) not null unique default 'Go.'" +
")") ")")
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
_, err = DB.Exec("CREATE TABLE IF NOT EXISTS tags(" + _, err = DB.Query("CREATE TABLE IF NOT EXISTS tags(" +
"id serial primary key," + "id serial primary key," +
"tag varchar(100) not null unique," + "tag varchar(100) not null unique," +
"content varchar(1000) not null," + "content varchar(1000) not null," +
@ -73,21 +66,21 @@ func InitializeDatabase() {
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
_, err = DB.Exec("CREATE TABLE IF NOT EXISTS x_users_guilds(" + _, err = DB.Query("CREATE TABLE IF NOT EXISTS x_users_guilds(" +
"guild_id varchar(30) not null references guilds(id)," + "guild_id varchar(30) not null references guilds(id)," +
"user_id varchar(30) not null references users(id)" + "user_id varchar(30) not null references users(id)" +
")") ")")
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
_, err = DB.Exec("CREATE TABLE IF NOT EXISTS x_guilds_prefixes(" + _, err = DB.Query("CREATE TABLE IF NOT EXISTS x_guilds_prefixes(" +
"guild_id varchar(30) not null references guilds(id)," + "guild_id varchar(30) not null references guilds(id)," +
"prefix_id int not null references prefixes(id)" + "prefix_id int not null references prefixes(id)" +
")") ")")
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
_, err = DB.Exec("CREATE TABLE IF NOT EXISTS tasks(" + _, err = DB.Query("CREATE TABLE IF NOT EXISTS tasks(" +
"id serial primary key," + "id serial primary key," +
"type varchar(10) not null," + "type varchar(10) not null," +
"content text not null," + "content text not null," +
@ -101,7 +94,7 @@ func InitializeDatabase() {
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
_, err = DB.Exec(`CREATE TABLE IF NOT EXISTS postfixes( _, err = DB.Query(`CREATE TABLE IF NOT EXISTS postfixes(
id serial primary key, id serial primary key,
name varchar(100) not null, name varchar(100) not null,
time timestamp not null default NOW())`) time timestamp not null default NOW())`)
@ -126,37 +119,37 @@ func InitializeDatabase() {
} }
func LoadTestData() { func LoadTestData() {
_, err := DB.Exec("INSERT INTO users (id, banned, logging, steam_id, is_active, is_staff, is_admin) values " + _, err := DB.Query("INSERT INTO users (id, banned, logging, steam_id, is_active, is_staff, is_admin) values " +
"('351794468870946827', false, true, '76561198024193239', true, true, true)," + "('351794468870946827', false, true, '76561198024193239', true, true, true)," +
"('692908139506434065', false, true, '', true, false, false)," + "('692908139506434065', false, true, '', true, false, false)," +
"('396588996706304010', false, true, '', true, true, false)") "('396588996706304010', false, true, '', true, true, false)")
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
_, err = DB.Exec("INSERT INTO guilds (id, welcome_message, goodbye_message) VALUES " + _, err = DB.Query("INSERT INTO guilds (id, welcome_message, goodbye_message) VALUES " +
"('265828729970753537', 'Hey there is someone new here.', 'Well fine then... Just leave without saying goodbye')") "('265828729970753537', 'Hey there is someone new here.', 'Well fine then... Just leave without saying goodbye')")
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
_, err = DB.Exec("INSERT INTO prefixes (prefix) VALUES ('Godev.'), ('godev.'), ('godev,')") _, err = DB.Query("INSERT INTO prefixes (prefix) VALUES ('Godev.'), ('godev.'), ('godev,')")
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
_, err = DB.Exec("INSERT INTO x_users_guilds (guild_id, user_id) VALUES " + _, err = DB.Query("INSERT INTO x_users_guilds (guild_id, user_id) VALUES " +
"('265828729970753537', '351794468870946827')," + "('265828729970753537', '351794468870946827')," +
"('265828729970753537', '692908139506434065')," + "('265828729970753537', '692908139506434065')," +
"('265828729970753537', '396588996706304010')") "('265828729970753537', '396588996706304010')")
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
_, err = DB.Exec("INSERT INTO x_guilds_prefixes (guild_id, prefix_id) VALUES " + _, err = DB.Query("INSERT INTO x_guilds_prefixes (guild_id, prefix_id) VALUES " +
"('265828729970753537', 1)," + "('265828729970753537', 1)," +
"('265828729970753537', 2)," + "('265828729970753537', 2)," +
"('265828729970753537', 3)") "('265828729970753537', 3)")
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
_, err = DB.Exec("INSERT INTO tags (tag, content, creator, guild_id) VALUES " + _, err = DB.Query("INSERT INTO tags (tag, content, creator, guild_id) VALUES " +
"('test', 'This is a test of the tag system', '351794468870946827', '265828729970753537')") "('test', 'This is a test of the tag system', '351794468870946827', '265828729970753537')")
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)

View File

@ -4,7 +4,7 @@ import (
"database/sql" "database/sql"
"log" "log"
"gitea.wayfinderak.com/wayfinderak/goff" "github.com/dustinpianalto/goff"
) )
type GuildService struct { type GuildService struct {

View File

@ -32,10 +32,6 @@ var postfixes = []postfix{
Name: "4_Add_Multi_Column_Unique_XUsersGuilds", Name: "4_Add_Multi_Column_Unique_XUsersGuilds",
Invoke: addMultiColumnUniqueXUsersGuilds, Invoke: addMultiColumnUniqueXUsersGuilds,
}, },
postfix{
Name: "5_Add_Auto_Role_To_Roles_Table",
Invoke: addAutoRoleToRoles,
},
} }
func RunPostfixes() { func RunPostfixes() {
@ -47,10 +43,8 @@ func RunPostfixes() {
continue continue
} }
if rows.Next() { if rows.Next() {
rows.Close()
continue continue
} else { } else {
rows.Close()
err := postfix.Invoke(false) err := postfix.Invoke(false)
if err != nil { if err != nil {
continue continue
@ -168,20 +162,3 @@ func addMultiColumnUniqueXUsersGuilds(revert bool) error {
} }
return nil return nil
} }
func addAutoRoleToRoles(revert bool) error {
var queryString string
if !revert {
queryString = `ALTER TABLE roles
ADD COLUMN auto_role bool DEFAULT false`
} else {
queryString = `ALTER TABLE roles
DROP COLUMN auto_role`
}
_, err := DB.Exec(queryString)
if err != nil {
log.Println(err)
return err
}
return nil
}

View File

@ -1,86 +0,0 @@
package postgres
import (
"database/sql"
"log"
"gitea.wayfinderak.com/wayfinderak/goff"
)
type RoleService struct {
DB *sql.DB
}
func (s *RoleService) Role(id string) (*goff.Role, error) {
var r goff.Role
queryString := `SELECT id, moderator, admin, self_assignable, guild_id FROM roles WHERE id = $1`
row := s.DB.QueryRow(queryString, id)
if err := row.Scan(&r.ID, &r.IsModerator, &r.IsAdmin, &r.SelfAssignable, &r.Guild); err != nil {
return nil, err
}
return &r, nil
}
func (s *RoleService) AddRole(r *goff.Role) (*goff.Role, error) {
queryString := `INSERT INTO roles (id, moderator, admin, self_assignable, auto_role, guild_id)
VALUES ($1, $2, $3, $4, $5, $6) ON CONFLICT DO NOTHING`
_, err := s.DB.Exec(queryString, r.ID, r.IsModerator, r.IsAdmin, r.SelfAssignable, r.AutoRole, r.Guild)
if err != nil {
return nil, err
}
return r, nil
}
func (s *RoleService) DeleteRole(r *goff.Role) error {
queryString := `DELETE FROM roles WHERE id = $1`
_, err := s.DB.Exec(queryString, r.ID)
return err
}
func (s *RoleService) MakeSelfAssignable(r *goff.Role) error {
queryString := `UPDATE roles SET self_assignable = true WHERE id = $1`
_, err := s.DB.Exec(queryString, r.ID)
return err
}
func (s *RoleService) RemoveSelfAssignable(r *goff.Role) error {
queryString := `UPDATE roles SET self_assignable = false WHERE id = $1`
_, err := s.DB.Exec(queryString, r.ID)
return err
}
func (s *RoleService) MakeAutoRole(r *goff.Role) error {
queryString := `UPDATE roles SET auto_role = true WHERE id = $1`
_, err := s.DB.Exec(queryString, r.ID)
return err
}
func (s *RoleService) RemoveAutoRole(r *goff.Role) error {
queryString := `UPDATE roles SET auto_role = false WHERE id = $1`
_, err := s.DB.Exec(queryString, r.ID)
return err
}
func (s *RoleService) GetAutoRoles(gID string) ([]*goff.Role, error) {
var roles []*goff.Role
queryString := `SELECT id FROM roles WHERE guild_id = $1 AND auto_role = true`
rows, err := s.DB.Query(queryString, gID)
if err != nil {
return nil, err
}
for rows.Next() {
var id string
err := rows.Scan(&id)
if err != nil {
log.Println(err)
continue
}
role, err := s.Role(id)
if err != nil {
log.Println(err)
continue
}
roles = append(roles, role)
}
return roles, nil
}

View File

@ -3,7 +3,7 @@ package postgres
import ( import (
"database/sql" "database/sql"
"gitea.wayfinderak.com/wayfinderak/goff" "github.com/dustinpianalto/goff"
) )
type UserService struct { type UserService struct {

View File

@ -1,13 +1,11 @@
package services package services
import "gitea.wayfinderak.com/wayfinderak/goff" import "github.com/dustinpianalto/goff"
var UserService goff.UserService var UserService goff.UserService
var GuildService goff.GuildService var GuildService goff.GuildService
var RoleService goff.RoleService
func InitalizeServices(us goff.UserService, gs goff.GuildService, rs goff.RoleService) { func InitalizeServices(us goff.UserService, gs goff.GuildService) {
UserService = us UserService = us
GuildService = gs GuildService = gs
RoleService = rs
} }

View File

@ -9,7 +9,7 @@ import (
"time" "time"
"github.com/bwmarrin/discordgo" "github.com/bwmarrin/discordgo"
"gitea.wayfinderak.com/wayfinderak/goff/pkg/puzzles" "github.com/dustinpianalto/goff/pkg/puzzles"
imap "github.com/emersion/go-imap" imap "github.com/emersion/go-imap"
"github.com/emersion/go-imap/client" "github.com/emersion/go-imap/client"
"github.com/emersion/go-message/mail" "github.com/emersion/go-message/mail"

View File

@ -8,8 +8,8 @@ import (
"time" "time"
"github.com/bwmarrin/discordgo" "github.com/bwmarrin/discordgo"
"gitea.wayfinderak.com/wayfinderak/goff" "github.com/dustinpianalto/goff"
"gitea.wayfinderak.com/wayfinderak/goff/internal/postgres" "github.com/dustinpianalto/goff/internal/postgres"
"github.com/emersion/go-message/mail" "github.com/emersion/go-message/mail"
) )

View File

@ -1,4 +0,0 @@
DATABASE_URL=postgresql://USER:PASSWORD@HOST:5432/goff?sslmode=disable
DISCORDGO_TOKEN=replace-me
GOFF_EMAIL_USERNAME=replace-me
GOFF_EMAIL_PASSWORD=replace-me

View File

@ -1,9 +0,0 @@
services:
goff:
image: gitea.wayfinderak.com/wayfinderak/goff:latest
container_name: goff
restart: unless-stopped
env_file:
- ./portainer-app.env
mem_limit: 1g
cpus: "2.0"

21
role.go
View File

@ -1,21 +0,0 @@
package goff
type Role struct {
ID string
IsModerator bool
IsAdmin bool
SelfAssignable bool
AutoRole bool
Guild string
}
type RoleService interface {
Role(id string) (*Role, error)
AddRole(r *Role) (*Role, error)
DeleteRole(r *Role) error
MakeSelfAssignable(r *Role) error
RemoveSelfAssignable(r *Role) error
MakeAutoRole(r *Role) error
RemoveAutoRole(r *Role) error
GetAutoRoles(gID string) ([]*Role, error)
}