Skip to content

Commit

Permalink
Fixed sending transcript message to wrong user
Browse files Browse the repository at this point in the history
  • Loading branch information
Paranoia8972 committed Oct 8, 2024
1 parent 596203d commit 7feb436
Show file tree
Hide file tree
Showing 3 changed files with 90 additions and 7 deletions.
1 change: 1 addition & 0 deletions internal/pkg/commands/help.go
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package commands
62 changes: 55 additions & 7 deletions internal/pkg/commands/ticket.go
Original file line number Diff line number Diff line change
Expand Up @@ -371,7 +371,6 @@ func ModalSubmitHandler(s *discordgo.Session, i *discordgo.InteractionCreate) {
}
}

// Create ticket channel
ticketChannel, err := utils.GetTicketSetup(i.GuildID)
if err != nil {
respondWithMessage(s, i, "Failed to retrieve ticket channel.")
Expand All @@ -393,7 +392,7 @@ func ModalSubmitHandler(s *discordgo.Session, i *discordgo.InteractionCreate) {
Name: channelName,
Type: discordgo.ChannelTypeGuildText,
ParentID: ticketChannel.CategoryID,
Topic: fmt.Sprintf("%s: %s", data.CustomID, embed.Fields[1].Value),
Topic: fmt.Sprintf("%s: %s", data.CustomID, embed.Fields[0].Value),
PermissionOverwrites: []*discordgo.PermissionOverwrite{
{
ID: i.Member.User.ID, // user
Expand All @@ -407,21 +406,53 @@ func ModalSubmitHandler(s *discordgo.Session, i *discordgo.InteractionCreate) {
Allow: 0,
Deny: discordgo.PermissionViewChannel | discordgo.PermissionSendMessages | discordgo.PermissionReadMessageHistory,
},
{
ID: "1074354995757076662", // replace with admin role id
Type: discordgo.PermissionOverwriteTypeRole,
Allow: discordgo.PermissionViewChannel | discordgo.PermissionSendMessages | discordgo.PermissionReadMessageHistory,
Deny: 0,
},
},
})
if err != nil {
respondWithMessage(s, i, "Failed to create ticket channel.")
return
}

details := make(map[string]string)
for _, component := range data.Components {
if actionRow, ok := component.(*discordgo.ActionsRow); ok {
for _, item := range actionRow.Components {
if input, ok := item.(*discordgo.TextInput); ok {
details[input.CustomID] = input.Value
}
}
}
}

ticketType := data.CustomID

ticket := utils.Tickets{
GuildID: i.GuildID,
UserID: userID,
Username: username,
ChannelID: channel.ID,
Type: ticketType,
Details: details,
}
_, err = utils.StoreTicket(ticket)
if err != nil {
respondWithMessage(s, i, "Failed to store ticket information.")
return
}

err = utils.IncrementTicketNumber(i.GuildID, userID, ticketNumber)
if err != nil {
respondWithMessage(s, i, "Failed to increment ticket number.")
return
}

respondWithMessage(s, i, "Ticket created: <#"+channel.ID+">")

s.ChannelMessageSendComplex(channel.ID, &discordgo.MessageSend{
Content: "Ticket created by <@" + userID + ">",
Components: []discordgo.MessageComponent{
Expand All @@ -437,7 +468,6 @@ func ModalSubmitHandler(s *discordgo.Session, i *discordgo.InteractionCreate) {
},
Embeds: []*discordgo.MessageEmbed{embed},
})
log.Println("Error responding to modal submission:", err)
}

func createMessageData(msg *discordgo.Message) map[string]interface{} {
Expand Down Expand Up @@ -526,14 +556,20 @@ func TicketCloseHandler(s *discordgo.Session, i *discordgo.InteractionCreate) {
log.Printf("channel %s deleted", i.ChannelID)
}

channel, err := s.UserChannelCreate(i.Member.User.ID)
ticket, err := utils.GetTicketByChannelID(i.ChannelID)
if err != nil {
log.Printf("error retrieving ticket: %v", err)
return
}

channel, err := s.UserChannelCreate(ticket.UserID)
if err != nil {
log.Printf("error creating DM channel: %v", err)
return
}

username := i.Member.User.Username
userID := i.Member.User.ID
username := ticket.Username
userID := ticket.UserID

ticketNumber, err := utils.GetNextTicketNumber(i.GuildID, userID)
if err != nil {
Expand All @@ -547,5 +583,17 @@ func TicketCloseHandler(s *discordgo.Session, i *discordgo.InteractionCreate) {
if _, err := s.ChannelMessageSend(channel.ID, message); err != nil {
log.Printf("error sending DM: %v", err)
}
transcriptChannelID, err := utils.GetTranscriptChannelID(i.GuildID)
if err != nil {
log.Printf("error retrieving transcript channel ID: %v", err)
return
}

transcriptMessage := fmt.Sprintf("Transcript for ticket `ticket-%s-%d`: https://%s/ticket?id=%s",
username, ticketNumber-1, cfg.TranscriptUrl, transcriptID.Hex())

if _, err := s.ChannelMessageSend(transcriptChannelID, transcriptMessage); err != nil {
log.Printf("error sending message to transcript channel: %v", err)
}
}
}
34 changes: 34 additions & 0 deletions internal/pkg/utils/ticket.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,10 @@ type Tickets struct {
ID primitive.ObjectID `bson:"_id,omitempty"`
GuildID string `bson:"guild_id"`
UserID string `bson:"user_id"`
Username string `bson:"username"`
ChannelID string `bson:"channel_id"`
Type string `bson:"type"`
Details map[string]string `bson:"details"`
Transcript string `bson:"transcript"`
}

Expand Down Expand Up @@ -101,3 +104,34 @@ func StoreTranscript(guildID, userID, channelID string, transcriptJSON []byte) (
}
return result.InsertedID.(primitive.ObjectID), nil
}

func GetTicketByChannelID(channelID string) (Tickets, error) {
collection := db.GetCollection(cfg.DBName, "tickets")
filter := bson.M{"channel_id": channelID}
var ticket Tickets
err := collection.FindOne(context.Background(), filter).Decode(&ticket)
if err != nil {
return Tickets{}, err
}
return ticket, nil
}

func StoreTicket(ticket Tickets) (primitive.ObjectID, error) {
collection := db.GetCollection(cfg.DBName, "tickets")
result, err := collection.InsertOne(context.Background(), ticket)
if err != nil {
return primitive.NilObjectID, err
}
return result.InsertedID.(primitive.ObjectID), nil
}

func GetTranscriptChannelID(guildID string) (string, error) {
collection := db.GetCollection(cfg.DBName, "ticket_setup")
filter := bson.M{"guild_id": guildID}
var ticketSetup TicketSetup
err := collection.FindOne(context.Background(), filter).Decode(&ticketSetup)
if err != nil {
return "", err
}
return ticketSetup.TranscriptChannelID, nil
}

0 comments on commit 7feb436

Please sign in to comment.