forked from CFC-Servers/cfc_chat_transit
Add web portion
This commit is contained in:
parent
2584c6c0ce
commit
41e2e720d8
24
web/Dockerfile
Normal file
24
web/Dockerfile
Normal file
@ -0,0 +1,24 @@
|
||||
FROM golang:1.15.4-alpine as builder
|
||||
|
||||
ENV GOPATH=/build
|
||||
ENV GOBIN=/usr/local/go/bin
|
||||
ENV GO111MODULE=on
|
||||
|
||||
WORKDIR $GOPATH/src
|
||||
COPY . .
|
||||
|
||||
ARG BRANCH=HEAD
|
||||
RUN go mod init cfc_chat_relay\
|
||||
&& go get github.com/gorilla/websocket@$BRANCH \
|
||||
&& go get github.com/bwmarrin/discordgo@$BRANCH \
|
||||
&& go list -m all \
|
||||
&& go fmt \
|
||||
&& CGO_ENABLED=0 GOOS=linux go build -a -o cfc_chat_relay . \
|
||||
&& cp cfc_chat_relay $GOPATH/.
|
||||
|
||||
CMD [ "/build/cfc_chat_relay" ]
|
||||
|
||||
FROM alpine:3.11.3
|
||||
COPY --from=builder /build/cfc_chat_relay .
|
||||
|
||||
CMD [ "./cfc_chat_relay" ]
|
25
web/client.py
Normal file
25
web/client.py
Normal file
@ -0,0 +1,25 @@
|
||||
import asyncio
|
||||
import websockets
|
||||
import json
|
||||
|
||||
message = json.dumps({
|
||||
"content": "Message content",
|
||||
"realm": "CFC3",
|
||||
"rankColor": 16711680,
|
||||
"avatar": "https://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/c3/c3364b63359c0c8d0c1b3cca74eb5768e533b366_full.jpg",
|
||||
"steamName": "Phatso",
|
||||
"steamId": "1234567890",
|
||||
"irisId": "09876"
|
||||
})
|
||||
|
||||
async def hello():
|
||||
uri = "ws://0.0.0.0:5050/relay"
|
||||
|
||||
async with websockets.connect(uri) as websocket:
|
||||
await websocket.send(message)
|
||||
print(f"> {message}")
|
||||
|
||||
greeting = await websocket.recv()
|
||||
print(f"< {greeting}")
|
||||
|
||||
asyncio.get_event_loop().run_until_complete(hello())
|
0
web/docker-compose.prod.yml
Normal file
0
web/docker-compose.prod.yml
Normal file
10
web/docker-compose.yml
Normal file
10
web/docker-compose.yml
Normal file
@ -0,0 +1,10 @@
|
||||
version: "3.8"
|
||||
services:
|
||||
web:
|
||||
build: .
|
||||
ports:
|
||||
- "$PORT:8080"
|
||||
env_file:
|
||||
- .env
|
||||
volumes:
|
||||
- ./:/build/src
|
18
web/main.go
Normal file
18
web/main.go
Normal file
@ -0,0 +1,18 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"log"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
|
||||
func main() {
|
||||
addr := flag.String("addr", "0.0.0.0:8080", "http service address")
|
||||
flag.Parse()
|
||||
//log.SetFlags(0)
|
||||
http.HandleFunc("/relay", relay)
|
||||
|
||||
go queueGroomer()
|
||||
log.Fatal(http.ListenAndServe(*addr, nil))
|
||||
}
|
75
web/queue.go
Normal file
75
web/queue.go
Normal file
@ -0,0 +1,75 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"encoding/json"
|
||||
"github.com/bwmarrin/discordgo"
|
||||
"os"
|
||||
)
|
||||
|
||||
var discord *discordgo.Session
|
||||
|
||||
type MessageStruct struct{
|
||||
Realm string
|
||||
Content string
|
||||
RankColor int
|
||||
Avatar string
|
||||
SteamName string
|
||||
SteamId string
|
||||
IrisId string
|
||||
}
|
||||
|
||||
var MessageQueue = make(chan []byte, 100)
|
||||
|
||||
var WebhookId string = os.Getenv("WEBHOOK_ID")
|
||||
var WebhookSecret string = os.Getenv("WEBHOOK_SECRET")
|
||||
|
||||
|
||||
func sendEmbed(discord *discordgo.Session, message MessageStruct) {
|
||||
|
||||
params := &discordgo.WebhookParams{
|
||||
Content: "",
|
||||
Embeds: []*discordgo.MessageEmbed{
|
||||
{
|
||||
Title: "Said on " + message.Realm,
|
||||
Description: message.Content,
|
||||
Color: message.RankColor,
|
||||
Author: &discordgo.MessageEmbedAuthor{
|
||||
URL: "https://steamcommunity.com/profiles/" + message.SteamId,
|
||||
Name: message.SteamName,
|
||||
IconURL: message.Avatar,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
discord.WebhookExecute(WebhookId, WebhookSecret, true, params)
|
||||
//discord.WebhookExecute("810674008244092930", "90iO4UnmHQ_W9HFVycr50us1R0JMDd_wmDWqyVXt_d-jpuLK_6WwWOYDar6OLV-ymkIz", true, params)
|
||||
}
|
||||
|
||||
func queueGroomer() {
|
||||
discord, err := discordgo.New("")
|
||||
|
||||
log.Print(WebhookId, WebhookSecret)
|
||||
|
||||
if err != nil {
|
||||
log.Fatal("error connecting:", err)
|
||||
return
|
||||
}
|
||||
|
||||
log.Print("Successfully connected to Discord")
|
||||
|
||||
for {
|
||||
rawMessage := <-MessageQueue
|
||||
log.Print("Received message from queue: ", string(rawMessage))
|
||||
var message MessageStruct
|
||||
|
||||
if err := json.Unmarshal(rawMessage, &message); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
log.Print(message.SteamName, message.SteamId, message.Content)
|
||||
|
||||
sendEmbed(discord, message)
|
||||
}
|
||||
}
|
36
web/relay.go
Normal file
36
web/relay.go
Normal file
@ -0,0 +1,36 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net/http"
|
||||
"github.com/gorilla/websocket"
|
||||
)
|
||||
|
||||
var upgrader = websocket.Upgrader{}
|
||||
|
||||
func relay(w http.ResponseWriter, r *http.Request) {
|
||||
// TODO: Prevent multiple clients here
|
||||
|
||||
c, err := upgrader.Upgrade(w, r, nil)
|
||||
if err != nil {
|
||||
log.Print("upgrade:", err)
|
||||
return
|
||||
}
|
||||
|
||||
defer c.Close()
|
||||
|
||||
for {
|
||||
_, message, err := c.ReadMessage()
|
||||
if err != nil {
|
||||
log.Println("read:", err)
|
||||
break
|
||||
}
|
||||
|
||||
select {
|
||||
case MessageQueue <- message:
|
||||
// okay
|
||||
default:
|
||||
log.Print("Queue was full, could not add message!", string(message))
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user