Merge pull request 'ImplMessageMonitor' (#2) from ImplMessageMonitor into main
Reviewed-on: #2
This commit was merged in pull request #2.
	This commit is contained in:
		
							
								
								
									
										10
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								README.md
									
									
									
									
									
								
							@@ -15,7 +15,9 @@ This setting should be enabled for the bot in the discord developer panel for it
 | 
				
			|||||||
  SERVER_ID = "1050204101826334999"
 | 
					  SERVER_ID = "1050204101826334999"
 | 
				
			||||||
  OUTPUT_CHANNEL_ID = "1250585834726621999"
 | 
					  OUTPUT_CHANNEL_ID = "1250585834726621999"
 | 
				
			||||||
  PREFIX_ENABLED = true
 | 
					  PREFIX_ENABLED = true
 | 
				
			||||||
  ALLOW_DUPLICATES = false
 | 
					  SERVER_ID_ENABLED = false
 | 
				
			||||||
 | 
					  CHANNEL_ID_ENABLED = true
 | 
				
			||||||
 | 
					  MESSAGE_LINK_ENABLED = false
 | 
				
			||||||
  [SERVERS.COIN_REGEXES]
 | 
					  [SERVERS.COIN_REGEXES]
 | 
				
			||||||
    Bitcoin = "[13][a-km-zA-HJ-NP-Z1-9]{25,34}"
 | 
					    Bitcoin = "[13][a-km-zA-HJ-NP-Z1-9]{25,34}"
 | 
				
			||||||
    Ethereum = "0x[a-fA-F0-9]{40}"
 | 
					    Ethereum = "0x[a-fA-F0-9]{40}"
 | 
				
			||||||
@@ -25,8 +27,10 @@ This setting should be enabled for the bot in the discord developer panel for it
 | 
				
			|||||||
[[SERVERS]]
 | 
					[[SERVERS]]
 | 
				
			||||||
  SERVER_ID = "1250885747062345999"
 | 
					  SERVER_ID = "1250885747062345999"
 | 
				
			||||||
  OUTPUT_CHANNEL_ID = "1250585834726621999"
 | 
					  OUTPUT_CHANNEL_ID = "1250585834726621999"
 | 
				
			||||||
  PREFIX_ENABLED = true
 | 
					  PREFIX_ENABLED = false 
 | 
				
			||||||
  ALLOW_DUPLICATES = false
 | 
					  SERVER_ID_ENABLED = false
 | 
				
			||||||
 | 
					  CHANNEL_ID_ENABLED = true
 | 
				
			||||||
 | 
					  MESSAGE_LINK_ENABLED = false
 | 
				
			||||||
  [SERVERS.COIN_REGEXES]
 | 
					  [SERVERS.COIN_REGEXES]
 | 
				
			||||||
    Ethereum = "0x[a-fA-F0-9]{40}"
 | 
					    Ethereum = "0x[a-fA-F0-9]{40}"
 | 
				
			||||||
    Solana = "[1-9A-HJ-NP-Za-km-z]{32,44}"
 | 
					    Solana = "[1-9A-HJ-NP-Za-km-z]{32,44}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,6 +5,9 @@
 | 
				
			|||||||
  SERVER_ID = ""
 | 
					  SERVER_ID = ""
 | 
				
			||||||
  OUTPUT_CHANNEL_ID = ""
 | 
					  OUTPUT_CHANNEL_ID = ""
 | 
				
			||||||
  PREFIX_ENABLED = true
 | 
					  PREFIX_ENABLED = true
 | 
				
			||||||
 | 
					  SERVER_ID_ENABLED = false
 | 
				
			||||||
 | 
					  CHANNEL_ID_ENABLED = true
 | 
				
			||||||
 | 
					  MESSAGE_LINK_ENABLED = false
 | 
				
			||||||
  [SERVERS.COIN_REGEXES]
 | 
					  [SERVERS.COIN_REGEXES]
 | 
				
			||||||
    Bitcoin = "[13][a-km-zA-HJ-NP-Z1-9]{25,34}"
 | 
					    Bitcoin = "[13][a-km-zA-HJ-NP-Z1-9]{25,34}"
 | 
				
			||||||
    Ethereum = "0x[a-fA-F0-9]{40}"
 | 
					    Ethereum = "0x[a-fA-F0-9]{40}"
 | 
				
			||||||
@@ -15,6 +18,9 @@
 | 
				
			|||||||
  SERVER_ID = ""
 | 
					  SERVER_ID = ""
 | 
				
			||||||
  OUTPUT_CHANNEL_ID = ""
 | 
					  OUTPUT_CHANNEL_ID = ""
 | 
				
			||||||
  PREFIX_ENABLED = false 
 | 
					  PREFIX_ENABLED = false 
 | 
				
			||||||
 | 
					  SERVER_ID_ENABLED = false
 | 
				
			||||||
 | 
					  CHANNEL_ID_ENABLED = true
 | 
				
			||||||
 | 
					  MESSAGE_LINK_ENABLED = false
 | 
				
			||||||
  [SERVERS.COIN_REGEXES]
 | 
					  [SERVERS.COIN_REGEXES]
 | 
				
			||||||
    Ethereum = "0x[a-fA-F0-9]{40}"
 | 
					    Ethereum = "0x[a-fA-F0-9]{40}"
 | 
				
			||||||
    Solana = "[1-9A-HJ-NP-Za-km-z]{32,44}"
 | 
					    Solana = "[1-9A-HJ-NP-Za-km-z]{32,44}"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										44
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								main.go
									
									
									
									
									
								
							@@ -5,13 +5,11 @@ import (
 | 
				
			|||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"regexp"
 | 
						"regexp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
	"github.com/BurntSushi/toml"
 | 
						"github.com/BurntSushi/toml"
 | 
				
			||||||
	"github.com/bwmarrin/discordgo"
 | 
						"github.com/bwmarrin/discordgo"
 | 
				
			||||||
	"git.directme.in/Joren/SmsHook/ringbuffer"
 | 
						"git.directme.in/Joren/SmsHook/ringbuffer"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
var (
 | 
					var (
 | 
				
			||||||
	Token           string
 | 
						Token           string
 | 
				
			||||||
	Servers         []ServerConfig
 | 
						Servers         []ServerConfig
 | 
				
			||||||
@@ -29,6 +27,9 @@ type ServerConfig struct {
 | 
				
			|||||||
	} `toml:"CHANNEL_BLACKLIST"`
 | 
						} `toml:"CHANNEL_BLACKLIST"`
 | 
				
			||||||
	PrefixEnabled   bool `toml:"PREFIX_ENABLED"`
 | 
						PrefixEnabled   bool `toml:"PREFIX_ENABLED"`
 | 
				
			||||||
	AllowDuplicates bool `toml:"ALLOW_DUPLICATES"`
 | 
						AllowDuplicates bool `toml:"ALLOW_DUPLICATES"`
 | 
				
			||||||
 | 
						ServerIDEnabled bool `toml:"SERVER_ID_ENABLED"`
 | 
				
			||||||
 | 
						ChannelIDEnabled bool `toml:"CHANNEL_ID_ENABLED"`
 | 
				
			||||||
 | 
						MessageLinkEnabled bool `toml:"MESSAGE_LINK_ENABLED"` 
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func init() {
 | 
					func init() {
 | 
				
			||||||
@@ -110,19 +111,25 @@ func messageCreate(s *discordgo.Session, m *discordgo.MessageCreate) {
 | 
				
			|||||||
				return
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			checkMessageContent(s, server, m)
 | 
								guild, err := s.Guild(m.GuildID)
 | 
				
			||||||
			checkEmbeds(s, server, m)
 | 
								if err != nil {
 | 
				
			||||||
 | 
									fmt.Println("Error getting guild:", err)
 | 
				
			||||||
 | 
									return
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								checkMessageContent(s, server, m, guild.Name)
 | 
				
			||||||
 | 
								checkEmbeds(s, server, m, guild.Name)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func checkMessageContent(s *discordgo.Session, server ServerConfig, m *discordgo.MessageCreate) {
 | 
					func checkMessageContent(s *discordgo.Session, server ServerConfig, m *discordgo.MessageCreate, serverName string) {
 | 
				
			||||||
	for coin, regex := range CoinRegexes {
 | 
						for coin, regex := range CoinRegexes {
 | 
				
			||||||
		match := regex.FindStringSubmatch(m.Content)
 | 
							match := regex.FindStringSubmatch(m.Content)
 | 
				
			||||||
		if len(match) > 0 {
 | 
							if len(match) > 0 {
 | 
				
			||||||
			matchedAddress := match[0]
 | 
								matchedAddress := match[0]
 | 
				
			||||||
			message := formatMessage(server, coin, m.Author.Username, matchedAddress)
 | 
								message := formatMessage(server, coin, m.Author.Username, matchedAddress, serverName, m)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if !server.AllowDuplicates && MessageHistory[server.ServerID].ContainsItem(message) {
 | 
								if !server.AllowDuplicates && MessageHistory[server.ServerID].ContainsItem(message) {
 | 
				
			||||||
				return 
 | 
									return 
 | 
				
			||||||
@@ -134,14 +141,14 @@ func checkMessageContent(s *discordgo.Session, server ServerConfig, m *discordgo
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func checkEmbeds(s *discordgo.Session, server ServerConfig, m *discordgo.MessageCreate) {
 | 
					func checkEmbeds(s *discordgo.Session, server ServerConfig, m *discordgo.MessageCreate, serverName string) {
 | 
				
			||||||
	for _, embed := range m.Message.Embeds {
 | 
						for _, embed := range m.Message.Embeds {
 | 
				
			||||||
		if embed.Type == "rich" && embed.Description != "" {
 | 
							if embed.Type == "rich" && embed.Description != "" {
 | 
				
			||||||
			for coin, regex := range CoinRegexes {
 | 
								for coin, regex := range CoinRegexes {
 | 
				
			||||||
				match := regex.FindStringSubmatch(embed.Description)
 | 
									match := regex.FindStringSubmatch(embed.Description)
 | 
				
			||||||
				if len(match) > 0 {
 | 
									if len(match) > 0 {
 | 
				
			||||||
					matchedAddress := match[0]
 | 
										matchedAddress := match[0]
 | 
				
			||||||
					message := formatMessage(server, coin, m.Author.Username, matchedAddress)
 | 
										message := formatMessage(server, coin, m.Author.Username, matchedAddress, serverName, m)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					if !server.AllowDuplicates && MessageHistory[server.ServerID].ContainsItem(message) {
 | 
										if !server.AllowDuplicates && MessageHistory[server.ServerID].ContainsItem(message) {
 | 
				
			||||||
						return 
 | 
											return 
 | 
				
			||||||
@@ -155,11 +162,26 @@ func checkEmbeds(s *discordgo.Session, server ServerConfig, m *discordgo.Message
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func formatMessage(server ServerConfig, coin, username, address string) string {
 | 
					func formatMessage(server ServerConfig, coin, username, address, serverName string, m *discordgo.MessageCreate) string {
 | 
				
			||||||
 | 
						message := address
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if server.PrefixEnabled {
 | 
						if server.PrefixEnabled {
 | 
				
			||||||
		return fmt.Sprintf("%s: %s", coin, address)
 | 
							message = fmt.Sprintf("%s: %s", coin, address)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return address
 | 
					
 | 
				
			||||||
 | 
						if server.ServerIDEnabled {
 | 
				
			||||||
 | 
							message = fmt.Sprintf("%s (Server: %s)", message, serverName)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if server.ChannelIDEnabled {
 | 
				
			||||||
 | 
							message = fmt.Sprintf("%s (From: <#%s>)", message, m.ChannelID)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if server.MessageLinkEnabled {
 | 
				
			||||||
 | 
							message = fmt.Sprintf("%s ([Link](<https://discord.com/channels/%s/%s/%s>))", message, m.GuildID, m.ChannelID, m.ID)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return message
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func isChannelBlacklisted(serverID, channelID string) bool {
 | 
					func isChannelBlacklisted(serverID, channelID string) bool {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user