ImplMessageMonitor #2
							
								
								
									
										10
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								README.md
									
									
									
									
									
								
							| @@ -9,7 +9,9 @@ | ||||
|   SERVER_ID = "1050204101826334999" | ||||
|   OUTPUT_CHANNEL_ID = "1250585834726621999" | ||||
|   PREFIX_ENABLED = true | ||||
|   ALLOW_DUPLICATES = false | ||||
|   SERVER_ID_ENABLED = false | ||||
|   CHANNEL_ID_ENABLED = true | ||||
|   MESSAGE_LINK_ENABLED = false | ||||
|   [SERVERS.COIN_REGEXES] | ||||
|     Bitcoin = "[13][a-km-zA-HJ-NP-Z1-9]{25,34}" | ||||
|     Ethereum = "0x[a-fA-F0-9]{40}" | ||||
| @@ -19,8 +21,10 @@ | ||||
| [[SERVERS]] | ||||
|   SERVER_ID = "1250885747062345999" | ||||
|   OUTPUT_CHANNEL_ID = "1250585834726621999" | ||||
|   PREFIX_ENABLED = true | ||||
|   ALLOW_DUPLICATES = false | ||||
|   PREFIX_ENABLED = false  | ||||
|   SERVER_ID_ENABLED = false | ||||
|   CHANNEL_ID_ENABLED = true | ||||
|   MESSAGE_LINK_ENABLED = false | ||||
|   [SERVERS.COIN_REGEXES] | ||||
|     Ethereum = "0x[a-fA-F0-9]{40}" | ||||
|     Solana = "[1-9A-HJ-NP-Za-km-z]{32,44}" | ||||
|   | ||||
| @@ -5,6 +5,9 @@ | ||||
|   SERVER_ID = "" | ||||
|   OUTPUT_CHANNEL_ID = "" | ||||
|   PREFIX_ENABLED = true | ||||
|   SERVER_ID_ENABLED = false | ||||
|   CHANNEL_ID_ENABLED = true | ||||
|   MESSAGE_LINK_ENABLED = false | ||||
|   [SERVERS.COIN_REGEXES] | ||||
|     Bitcoin = "[13][a-km-zA-HJ-NP-Z1-9]{25,34}" | ||||
|     Ethereum = "0x[a-fA-F0-9]{40}" | ||||
| @@ -15,6 +18,9 @@ | ||||
|   SERVER_ID = "" | ||||
|   OUTPUT_CHANNEL_ID = "" | ||||
|   PREFIX_ENABLED = false  | ||||
|   SERVER_ID_ENABLED = false | ||||
|   CHANNEL_ID_ENABLED = true | ||||
|   MESSAGE_LINK_ENABLED = false | ||||
|   [SERVERS.COIN_REGEXES] | ||||
|     Ethereum = "0x[a-fA-F0-9]{40}" | ||||
|     Solana = "[1-9A-HJ-NP-Za-km-z]{32,44}" | ||||
|   | ||||
							
								
								
									
										44
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								main.go
									
									
									
									
									
								
							| @@ -5,13 +5,11 @@ import ( | ||||
| 	"os" | ||||
| 	"regexp" | ||||
|  | ||||
|  | ||||
| 	"github.com/BurntSushi/toml" | ||||
| 	"github.com/bwmarrin/discordgo" | ||||
| 	"git.directme.in/Joren/SmsHook/ringbuffer" | ||||
| ) | ||||
|  | ||||
|  | ||||
| var ( | ||||
| 	Token           string | ||||
| 	Servers         []ServerConfig | ||||
| @@ -29,6 +27,9 @@ type ServerConfig struct { | ||||
| 	} `toml:"CHANNEL_BLACKLIST"` | ||||
| 	PrefixEnabled   bool `toml:"PREFIX_ENABLED"` | ||||
| 	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() { | ||||
| @@ -110,19 +111,25 @@ func messageCreate(s *discordgo.Session, m *discordgo.MessageCreate) { | ||||
| 				return | ||||
| 			} | ||||
|  | ||||
| 			checkMessageContent(s, server, m) | ||||
| 			checkEmbeds(s, server, m) | ||||
| 			guild, err := s.Guild(m.GuildID) | ||||
| 			if err != nil { | ||||
| 				fmt.Println("Error getting guild:", err) | ||||
| 				return | ||||
| 			} | ||||
|  | ||||
| 			checkMessageContent(s, server, m, guild.Name) | ||||
| 			checkEmbeds(s, server, m, guild.Name) | ||||
| 			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 { | ||||
| 		match := regex.FindStringSubmatch(m.Content) | ||||
| 		if len(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) { | ||||
| 				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 { | ||||
| 		if embed.Type == "rich" && embed.Description != "" { | ||||
| 			for coin, regex := range CoinRegexes { | ||||
| 				match := regex.FindStringSubmatch(embed.Description) | ||||
| 				if len(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) { | ||||
| 						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 { | ||||
| 		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 { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user