ImplMessageMonitor #2
							
								
								
									
										10
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								README.md
									
									
									
									
									
								
							| @@ -9,7 +9,9 @@ | |||||||
|   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}" | ||||||
| @@ -19,8 +21,10 @@ | |||||||
| [[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}" | ||||||
|   | |||||||
							
								
								
									
										54
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								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 | ||||||
| @@ -21,14 +19,17 @@ var ( | |||||||
| ) | ) | ||||||
|  |  | ||||||
| type ServerConfig struct { | type ServerConfig struct { | ||||||
| 	ServerID       string `toml:"SERVER_ID"` | 	ServerID        string            `toml:"SERVER_ID"` | ||||||
| 	OutputChannelID string `toml:"OUTPUT_CHANNEL_ID"` | 	OutputChannelID string            `toml:"OUTPUT_CHANNEL_ID"` | ||||||
| 	CoinRegexes    map[string]string `toml:"COIN_REGEXES"` | 	CoinRegexes     map[string]string `toml:"COIN_REGEXES"` | ||||||
| 	ChannelBlacklist struct { | 	ChannelBlacklist struct { | ||||||
| 		Channels []string `toml:"CHANNELS"` | 		Channels []string `toml:"CHANNELS"` | ||||||
| 	} `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