✨ Better notify message, block same user DM channel
This commit is contained in:
		@@ -49,6 +49,10 @@ func createDirectChannel(c *fiber.Ctx) error {
 | 
				
			|||||||
		return fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("unable to find related user: %v", err))
 | 
							return fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("unable to find related user: %v", err))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if ch, err := services.GetDirectChannelByUser(user, relatedUser); err == nil {
 | 
				
			||||||
 | 
							return fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("you already have a direct with that user #%d", ch.ID))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	channel := models.Channel{
 | 
						channel := models.Channel{
 | 
				
			||||||
		Alias:       data.Alias,
 | 
							Alias:       data.Alias,
 | 
				
			||||||
		Name:        data.Name,
 | 
							Name:        data.Name,
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										24
									
								
								pkg/internal/services/direct_channels.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								pkg/internal/services/direct_channels.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					package services
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
						"git.solsynth.dev/hydrogen/messaging/pkg/internal/database"
 | 
				
			||||||
 | 
						"git.solsynth.dev/hydrogen/messaging/pkg/internal/models"
 | 
				
			||||||
 | 
						"github.com/spf13/viper"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func GetDirectChannelByUser(user models.Account, other models.Account) (models.Channel, error) {
 | 
				
			||||||
 | 
						memberTable := fmt.Sprintf("%schannel_members", viper.GetString("database.prefix"))
 | 
				
			||||||
 | 
						channelTable := fmt.Sprintf("%schannels", viper.GetString("database.prefix"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var channel models.Channel
 | 
				
			||||||
 | 
						if err := database.C.Preload("Members").
 | 
				
			||||||
 | 
							Where("type = ?", models.ChannelTypeDirect).
 | 
				
			||||||
 | 
							Joins(fmt.Sprintf("JOIN %s cm1 ON cm1.channel_id = %s.id AND cm1.account_id = ?", memberTable, channelTable), user.ID).
 | 
				
			||||||
 | 
							Joins(fmt.Sprintf("JOIN %s cm2 ON cm2.channel_id = %s.id AND cm2.account_id = ?", memberTable, channelTable), other.ID).
 | 
				
			||||||
 | 
							First(&channel).Error; err != nil {
 | 
				
			||||||
 | 
							return channel, err
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							return channel, nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -125,9 +125,18 @@ func NotifyMessageEvent(members []models.ChannelMember, event models.Event) {
 | 
				
			|||||||
				displayText = fmt.Sprintf("%d attachment(s)", len(body.Attachments))
 | 
									displayText = fmt.Sprintf("%d attachment(s)", len(body.Attachments))
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								var channelDisplay string
 | 
				
			||||||
 | 
								if event.Channel.Type == models.ChannelTypeDirect {
 | 
				
			||||||
 | 
									channelDisplay = "DM"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if len(channelDisplay) == 0 {
 | 
				
			||||||
 | 
									channelDisplay = event.Channel.Alias
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			err := NotifyAccountMessager(member.Account,
 | 
								err := NotifyAccountMessager(member.Account,
 | 
				
			||||||
				"incomingMessage",
 | 
									"incomingMessage",
 | 
				
			||||||
				fmt.Sprintf("%s in #%s", event.Sender.Account.Nick, event.Channel.Alias),
 | 
									fmt.Sprintf("%s in #%s", event.Sender.Account.Nick, channelDisplay),
 | 
				
			||||||
				fmt.Sprintf("%s", displayText),
 | 
									fmt.Sprintf("%s", displayText),
 | 
				
			||||||
				true,
 | 
									true,
 | 
				
			||||||
				false,
 | 
									false,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ secret = "LtTjzAGFLshwXhN4ZD4nG5KlMv1MWcsvfv03TSZYnT1VhiAnLIZFTnHUwR0XhGgi"
 | 
				
			|||||||
addr = "127.0.0.1:8500"
 | 
					addr = "127.0.0.1:8500"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[debug]
 | 
					[debug]
 | 
				
			||||||
database = false
 | 
					database = true
 | 
				
			||||||
print_routes = false
 | 
					print_routes = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[calling]
 | 
					[calling]
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user