parent
							
								
									1828615e94
								
							
						
					
					
						commit
						0bd76d9c7b
					
				@ -0,0 +1,37 @@
 | 
				
			|||||||
 | 
					package commands
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"github.com/bwmarrin/discordgo"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"gitea.teamortix.com/chanbakjsd/Milen/db"
 | 
				
			||||||
 | 
						"gitea.teamortix.com/chanbakjsd/Milen/util"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func handleAutorole(dg *discordgo.Session, m *discordgo.MessageCreate, arguments []string) {
 | 
				
			||||||
 | 
						if !util.HasAdmin(dg, m.Author.ID, m.ChannelID) {
 | 
				
			||||||
 | 
							util.SendErrorEmbed(dg, m.ChannelID, util.ErrRequireAdmin)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						parsedMessageLink, err := util.ParseMessageLink(arguments[0])
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							util.SendErrorEmbed(dg, m.ChannelID, err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						emoji, err := util.ParseEmoji(arguments[1])
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							util.SendErrorEmbed(dg, m.ChannelID, err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						role, err := util.ParseRole(arguments[2])
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							util.SendErrorEmbed(dg, m.ChannelID, err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						db.CreateReactRole(parsedMessageLink.MessageID, emoji, role)
 | 
				
			||||||
 | 
						err = dg.MessageReactionAdd(parsedMessageLink.ChannelID, parsedMessageLink.MessageID, emoji)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							util.ReportError(dg, err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						util.SendSuccessEmbed(dg, m.ChannelID, "Autorole has been registered successfully.")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,35 +0,0 @@
 | 
				
			|||||||
package humanify
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"fmt"
 | 
					 | 
				
			||||||
	"io/ioutil"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	"github.com/BurntSushi/toml"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var Eng Locale
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type Locale struct {
 | 
					 | 
				
			||||||
	NoAdmin  string `toml:"no_admin"`
 | 
					 | 
				
			||||||
	Usage    localeUsage
 | 
					 | 
				
			||||||
	Autorole localeAutorole
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type localeUsage struct {
 | 
					 | 
				
			||||||
	Autorole string `toml:"autorole"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type localeAutorole struct {
 | 
					 | 
				
			||||||
	Success string `toml:"success"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func init() {
 | 
					 | 
				
			||||||
	data, err := ioutil.ReadFile("locale.toml")
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		panic(err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	err = toml.Unmarshal(data, &Eng)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		panic(err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,7 +0,0 @@
 | 
				
			|||||||
no_admin="❌ You do not have permission to use this command."
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[usage]
 | 
					 | 
				
			||||||
autorole="❌ Incorrect usage. Usage: `milen autorole <role> <channel> <message> <emoji>`"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[autorole]
 | 
					 | 
				
			||||||
success="✅ Auto-role registered."
 | 
					 | 
				
			||||||
@ -0,0 +1,37 @@
 | 
				
			|||||||
 | 
					package util
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"github.com/bwmarrin/discordgo"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func SendSuccessEmbed(dg *discordgo.Session, channelID string, message string) {
 | 
				
			||||||
 | 
						_, err := dg.ChannelMessageSendEmbed(
 | 
				
			||||||
 | 
							channelID,
 | 
				
			||||||
 | 
							&discordgo.MessageEmbed{
 | 
				
			||||||
 | 
								Title:       "Success",
 | 
				
			||||||
 | 
								Description: message,
 | 
				
			||||||
 | 
								Color:       0x00D000,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							ReportError(dg, err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func SendErrorEmbed(dg *discordgo.Session, channelID string, toSend error) {
 | 
				
			||||||
 | 
						SendFailEmbed(dg, channelID, "Error", toSend.Error())
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func SendFailEmbed(dg *discordgo.Session, channelID string, title string, description string) {
 | 
				
			||||||
 | 
						_, err := dg.ChannelMessageSendEmbed(
 | 
				
			||||||
 | 
							channelID,
 | 
				
			||||||
 | 
							&discordgo.MessageEmbed{
 | 
				
			||||||
 | 
								Title:       title,
 | 
				
			||||||
 | 
								Description: description,
 | 
				
			||||||
 | 
								Color:       0xD00000,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							ReportError(dg, err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,19 +1,57 @@
 | 
				
			|||||||
package util
 | 
					package util
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"errors"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func ParseRole(roleString string) string {
 | 
					var (
 | 
				
			||||||
 | 
						//Errors for ParseRole
 | 
				
			||||||
 | 
						ErrInvalidRole = errors.New("Invalid role has been provided.")
 | 
				
			||||||
 | 
						//Errors for ParseEmoji
 | 
				
			||||||
 | 
						ErrInvalidEmoji = errors.New("Invalid emoji has been provided.")
 | 
				
			||||||
 | 
						//Errors for ParseMessageLink
 | 
				
			||||||
 | 
						ErrNotValidURL   = errors.New("Invalid URL has been provided (expecting message link).")
 | 
				
			||||||
 | 
						ErrNotDiscordURL = errors.New("Invalid Discord URL has been provided (expecting message link).")
 | 
				
			||||||
 | 
						ErrNotMessageURL = errors.New("Invalid Discord message link has been provided.")
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type ParsedMessageLink struct {
 | 
				
			||||||
 | 
						GuildID   string
 | 
				
			||||||
 | 
						ChannelID string
 | 
				
			||||||
 | 
						MessageID string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func ParseRole(roleString string) (string, error) {
 | 
				
			||||||
	if !strings.HasPrefix(roleString, "<@&") || !strings.HasSuffix(roleString, ">") {
 | 
						if !strings.HasPrefix(roleString, "<@&") || !strings.HasSuffix(roleString, ">") {
 | 
				
			||||||
		return ""
 | 
							return "", ErrInvalidRole
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return roleString[3 : len(roleString)-1]
 | 
						return roleString[3 : len(roleString)-1], nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func ParseEmoji(emojiString string) string {
 | 
					func ParseEmoji(emojiString string) (string, error) {
 | 
				
			||||||
	if !strings.HasPrefix(emojiString, "<:") || !strings.HasSuffix(emojiString, ">") {
 | 
						if strings.HasPrefix(emojiString, "<:") && strings.HasSuffix(emojiString, ">") {
 | 
				
			||||||
		return emojiString
 | 
							return emojiString[2 : len(emojiString)-1], nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						//TODO: We assume people aren't ill-intended and everything are actually emoji for now.
 | 
				
			||||||
 | 
						//The alternative would be to keep a list of all possible emoji which is overkill.
 | 
				
			||||||
 | 
						return emojiString, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func ParseMessageLink(messageLink string) (ParsedMessageLink, error) {
 | 
				
			||||||
 | 
						if !strings.HasPrefix(messageLink, "https://") {
 | 
				
			||||||
 | 
							return ParsedMessageLink{}, ErrNotValidURL
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						split := strings.Split(messageLink, "/")
 | 
				
			||||||
 | 
						if split[2] != "discordapp.com" && split[2] != "canary.discordapp.com" && split[2] != "ptb.discordapp.com" {
 | 
				
			||||||
 | 
							return ParsedMessageLink{}, ErrNotDiscordURL
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if len(split) < 7 || split[3] != "channels" {
 | 
				
			||||||
 | 
							return ParsedMessageLink{}, ErrNotMessageURL
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return emojiString[2 : len(emojiString)-1]
 | 
						return ParsedMessageLink{
 | 
				
			||||||
 | 
							GuildID:   split[4],
 | 
				
			||||||
 | 
							ChannelID: split[5],
 | 
				
			||||||
 | 
							MessageID: split[6],
 | 
				
			||||||
 | 
						}, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue