Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat welcome message #23

Merged
merged 17 commits into from
Sep 30, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions back/api/controllers/welcome_message.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package controllers

import (
"net/http"

"github.com/HETIC-MT-P2021/PROJECT_FINAL_GROUP03/back/bot/domain"
"github.com/HETIC-MT-P2021/PROJECT_FINAL_GROUP03/back/shared/cqrs"
"github.com/HETIC-MT-P2021/PROJECT_FINAL_GROUP03/back/shared/infrastructure"
"github.com/gin-gonic/gin"
log "github.com/sirupsen/logrus"
)

func UpdateWelcomeMessage(c *gin.Context) {
var form WelcomeMessageForm
if err := c.ShouldBindJSON(&form); err != nil {
c.JSON(http.StatusBadRequest, "new welcome message needed")
return
}
log.Info("new message : ", form.WelcomeMessage)

cmd := cqrs.NewCommandMessage(&domain.ChangeWelcomeMessageCommand{
Session: nil,
ServerDiscordID: c.Param("id"),
WelcomeMessage: form.WelcomeMessage,
})

_, err := infrastructure.CommandBus.Dispatch(cmd)
if err != nil {
c.JSON(http.StatusInternalServerError, "couldn't execute your demand")
return
}

c.JSON(http.StatusOK, "message updated with success")
}

type WelcomeMessageForm struct {
WelcomeMessage string `json:"welcome-message"`
}
24 changes: 24 additions & 0 deletions back/api/routes/router.go
Original file line number Diff line number Diff line change
@@ -1,13 +1,37 @@
package routes

import (
"time"

"github.com/HETIC-MT-P2021/PROJECT_FINAL_GROUP03/back/api/controllers"
"github.com/HETIC-MT-P2021/PROJECT_FINAL_GROUP03/back/shared/env"
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin"
)

func Initialize(r *gin.Engine) {
configureCORS(r)

api := r.Group("/api")
v1 := api.Group("/v1")

v1.GET("/", controllers.SayHello)

servers := v1.Group("/servers")
{
servers.PUT("/:id/welcome-message", controllers.UpdateWelcomeMessage)
}
}

func configureCORS(r *gin.Engine) {
r.Use(cors.New(cors.Config{
AllowOrigins: []string{
env.GetVariable("SERVER_ADDR_FRONT"),
},
AllowMethods: []string{"GET", "PUT", "POST", "DELETE", "OPTIONS"},
ExposeHeaders: []string{"Authorization"},
AllowHeaders: []string{"Origin", "Content-Type", "Authorization", "User-Agent", "Referrer", "Host"},
AllowCredentials: true,
MaxAge: 12 * time.Hour,
}))
}
34 changes: 34 additions & 0 deletions back/bot/discord/check_for_guilds.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package discord

import (
"github.com/HETIC-MT-P2021/PROJECT_FINAL_GROUP03/back/shared/models"
"github.com/HETIC-MT-P2021/PROJECT_FINAL_GROUP03/back/shared/repositories"
"github.com/HETIC-MT-P2021/PROJECT_FINAL_GROUP03/back/shared/services/servers"
"github.com/bwmarrin/discordgo"
log "github.com/sirupsen/logrus"
)

func checkForGuilds(s *discordgo.Session) {
// Get guilds
guilds, err := s.UserGuilds(100, "", "")
if err != nil {
log.Error(err)
return
}

// For each guild, check if in db and save it if it is not
for _, guild := range guilds {
server := models.Server{
Name: guild.Name,
DiscordID: guild.ID,
}
log.Info("guild", server.Name)
if servers.IsRegistered(server.DiscordID) {
log.Info("already exists : ", server.DiscordID)
continue
}
if err := repositories.PersistServer(&server); err != nil {
log.Error(err)
}
}
}
11 changes: 7 additions & 4 deletions back/bot/discord/connection.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,19 @@ func InitializeBot() (*discordgo.Session, error) {
if !tokenExist {
log.Fatal("Missing environment variable : DISCORD_TOKEN")
}

// Create a new Discord session using the provided bot token.
dg, err := discordgo.New("Bot " + discordToken)
if err != nil {
log.Error("Error creating Discord session, ", err)
return nil, err
}

// Register the messageCreate func as a callback for MessageCreate events.
dg.AddHandler(MessageCreate)

dg.AddHandler(GuildMemberAdd)
// In this example, we only care about receiving message events.
dg.Identify.Intents = discordgo.MakeIntent(discordgo.IntentsGuildMessages)
dg.Identify.Intents = discordgo.MakeIntent(discordgo.IntentsAll)

// Open a websocket connection to Discord and begin listening.
err = dg.Open()
Expand All @@ -32,5 +32,8 @@ func InitializeBot() (*discordgo.Session, error) {
return nil, err
}

// Check for new guilds
checkForGuilds(dg)

return dg, nil
}
29 changes: 29 additions & 0 deletions back/bot/discord/guild_handler.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package discord

import (
"github.com/HETIC-MT-P2021/PROJECT_FINAL_GROUP03/back/shared/models"
"github.com/HETIC-MT-P2021/PROJECT_FINAL_GROUP03/back/shared/repositories"
"github.com/bwmarrin/discordgo"
log "github.com/sirupsen/logrus"
)

func GuildMemberAdd(s *discordgo.Session, data *discordgo.GuildMemberAdd) {
log.Info("new user")
// Get welcome message and send message with it
server := models.Server{
DiscordID: data.GuildID,
}
if err := repositories.FindServerByDiscordID(&server); err != nil {
log.Error(err)
return
}

channel, err := s.UserChannelCreate(data.User.ID)
if err != nil {
log.Error(err)
return
}
if _, err := s.ChannelMessageSend(channel.ID, server.WelcomeMessage); err != nil {
log.Error(err)
}
}
63 changes: 54 additions & 9 deletions back/bot/discord/message_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ import (
"github.com/HETIC-MT-P2021/PROJECT_FINAL_GROUP03/back/bot/domain"
"github.com/HETIC-MT-P2021/PROJECT_FINAL_GROUP03/back/shared/cqrs"
"github.com/HETIC-MT-P2021/PROJECT_FINAL_GROUP03/back/shared/infrastructure"
"github.com/HETIC-MT-P2021/PROJECT_FINAL_GROUP03/back/shared/models"
"github.com/HETIC-MT-P2021/PROJECT_FINAL_GROUP03/back/shared/repositories"
"github.com/HETIC-MT-P2021/PROJECT_FINAL_GROUP03/back/shared/services/accounts"
"github.com/bwmarrin/discordgo"
log "github.com/sirupsen/logrus"
)
Expand All @@ -17,14 +20,19 @@ func MessageCreate(s *discordgo.Session, m *discordgo.MessageCreate) {
if m.Author.ID == s.State.User.ID {
return
}
signUpifNotRegistered(s)

if !strings.HasPrefix(strings.ToLower(m.Content), "/admin") {
return
}
commandName := strings.Split(m.Content, " ")[1]
params := strings.Split(m.Content, " ")
if len(params) < 2 {
return
}
commandName := params[1]

var err error
if commandName == "login" {
switch commandName {
case "login":
channel, err := s.UserChannelCreate(m.Author.ID)
if err != nil {
log.Error(err)
Expand All @@ -39,15 +47,52 @@ func MessageCreate(s *discordgo.Session, m *discordgo.MessageCreate) {
if _, err = infrastructure.CommandBus.Dispatch(cmd); err != nil {
log.Error(err)
}
}

if err != nil {
log.Error(err)
_, err := s.ChannelMessageSend(m.ChannelID, "Une erreur est survenue.")
if err != nil {
log.Error(err)
_, err := s.ChannelMessageSend(m.ChannelID, "Une erreur est survenue.")

if err != nil {
log.Error("sendMessageErr: ", err)
}
return
}
case "set-welcome-message":
params := params[2:]
message := strings.Join(params, " ")
cmd := cqrs.NewCommandMessage(&domain.ChangeWelcomeMessageCommand{
Session: s,
ServerDiscordID: m.GuildID,
WelcomeMessage: message,
})

_, err := infrastructure.CommandBus.Dispatch(cmd)
if err != nil {
log.Error("sendMessageErr: ", err)
log.Error(err)
_, err := s.ChannelMessageSend(m.ChannelID, "Une erreur est survenue.")

if err != nil {
log.Error("sendMessageErr: ", err)
}
} else {
_, err := s.ChannelMessageSend(m.ChannelID, "Nouveau message sauvegardé")

if err != nil {
log.Error("sendMessageErr: ", err)
}
}
}
}

func signUpifNotRegistered(s *discordgo.Session) {
if !accounts.IsRegistered(s.State.User.ID) {
account := models.Account{
Name: s.State.User.Username,
DiscordID: s.State.User.ID,
}

if err := repositories.PersistAccount(&account); err != nil {
log.Error(err)
}
return
}
}
25 changes: 25 additions & 0 deletions back/bot/domain/welcome_message.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package domain

import (
"github.com/HETIC-MT-P2021/PROJECT_FINAL_GROUP03/back/bot/services"
"github.com/HETIC-MT-P2021/PROJECT_FINAL_GROUP03/back/shared/cqrs"
"github.com/bwmarrin/discordgo"
)

type ChangeWelcomeMessageCommand struct {
ServerDiscordID,
WelcomeMessage string
Session *discordgo.Session
}

type ChangeWelcomeMessageCommandHandler struct{}

func (handler *ChangeWelcomeMessageCommandHandler) Handle(command cqrs.CommandMessage) (interface{}, error) {
switch cmd := command.Payload().(type) {
case *ChangeWelcomeMessageCommand:
err := services.ChangeWelcomeMessage(cmd.ServerDiscordID, cmd.WelcomeMessage, cmd.Session)
return nil, err
default:
return nil, nil
}
}
25 changes: 25 additions & 0 deletions back/bot/services/welcome_message.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package services

import (
"github.com/HETIC-MT-P2021/PROJECT_FINAL_GROUP03/back/shared/models"
"github.com/HETIC-MT-P2021/PROJECT_FINAL_GROUP03/back/shared/repositories"
"github.com/bwmarrin/discordgo"
log "github.com/sirupsen/logrus"
)

func ChangeWelcomeMessage(serverID, newMessage string, s *discordgo.Session) error {
server := models.Server{DiscordID: serverID}
if err := repositories.FindServerByDiscordID(&server); err != nil {
log.Error(err)
return err
}

// Update server
server.WelcomeMessage = newMessage
err := repositories.UpdateServerMessage(&server)
if err != nil {
log.Error(err)
}

return err
}
1 change: 1 addition & 0 deletions back/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ require (
github.com/bwmarrin/discordgo v0.23.2
github.com/gin-contrib/cors v1.3.1
github.com/gin-gonic/gin v1.7.4
github.com/go-playground/locales v0.13.0
github.com/jinzhu/gorm v1.9.16
github.com/joho/godotenv v1.3.0
github.com/sirupsen/logrus v1.8.1
Expand Down
9 changes: 5 additions & 4 deletions back/go.sum
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
github.com/HETIC-MT-P2021/PROJECT_FINAL_GROUP03 v0.0.0-20210901130014-fca8d1d94c7a h1:NpaAjJW8pmD77d+YchOLn35KYIGG37HHcurg+mCoano=
github.com/HETIC-MT-P2021/PROJECT_FINAL_GROUP03 v0.0.0-20210902094847-bcfc3c529c61 h1:35v892SeGZMFIlYjQzwMw8XQkibqtKFf+CxkxdgREPY=
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
github.com/bwmarrin/discordgo v0.23.2 h1:BzrtTktixGHIu9Tt7dEE6diysEF9HWnXeHuoJEt2fH4=
Expand Down Expand Up @@ -48,8 +48,10 @@ github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqx
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
Expand All @@ -68,6 +70,7 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
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/prometheus/common v0.30.0 h1:JEkYlQnpzrzQFxi6gnukFPdQ+ac82oRhzMcIduJu/Ug=
github.com/prometheus/common v0.31.0 h1:FTJdLTjtrh4dXlCjpzdZJXMnejSTL5F/nVQm5sNwD34=
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
Expand All @@ -92,17 +95,15 @@ golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 h1:YyJpGZS1sBuBCzLAR1VEpK193GlqGZbnPFnPV/5Rsb4=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
Expand Down
Loading