forked from chanbakjsd/TerraOceanPlugin
148 lines
3.7 KiB
Go
148 lines
3.7 KiB
Go
package main
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/bwmarrin/discordgo"
|
|
)
|
|
|
|
const guildID = "626424729234046987"
|
|
const memberRoleID = "626434632614805526"
|
|
const auditChannel = "631789849929711627"
|
|
|
|
var errMemberNotFound = errors.New("messageutil: the requested member was not found")
|
|
|
|
func enforceDM(s *discordgo.Session, m *discordgo.MessageCreate) bool {
|
|
if m.GuildID != "" {
|
|
//This command can only be used in DM to protect the invite creator.
|
|
s.ChannelMessageDelete(m.ChannelID, m.ID)
|
|
s.ChannelMessageSend(
|
|
m.ChannelID,
|
|
m.Author.Mention()+",这个指令只能在私信中使用。\n"+m.Author.Mention()+", this command can only be used in DM.",
|
|
)
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
func membersOnly(s *discordgo.Session, m *discordgo.MessageCreate) bool {
|
|
member, err := s.GuildMember(guildID, m.Author.ID)
|
|
if err != nil {
|
|
s.ChannelMessageSend(
|
|
m.ChannelID,
|
|
m.Author.Mention()+",请在成为会员后才使用这个指令。\n"+m.Author.Mention()+", please use this command after you become a member.",
|
|
)
|
|
return false
|
|
}
|
|
for _, v := range member.Roles {
|
|
if v == memberRoleID {
|
|
return true
|
|
}
|
|
}
|
|
s.ChannelMessageSend(
|
|
m.ChannelID,
|
|
m.Author.Mention()+",请在成为会员后才使用这个指令。\n"+m.Author.Mention()+", please use this command after you become a member.",
|
|
)
|
|
return false
|
|
}
|
|
|
|
func nonMembersOnly(s *discordgo.Session, m *discordgo.MessageCreate) bool {
|
|
member, err := s.GuildMember(guildID, m.Author.ID)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
for _, v := range member.Roles {
|
|
if v == memberRoleID {
|
|
s.ChannelMessageSend(
|
|
m.ChannelID,
|
|
m.Author.Mention()+",该指令只能被非会员使用。\n"+m.Author.Mention()+", this command can only be used by non-member.",
|
|
)
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func sendPrivateMessage(s *discordgo.Session, recipient, message string) error {
|
|
channel, err := s.UserChannelCreate(recipient)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
_, err = s.ChannelMessageSend(channel.ID, message)
|
|
return err
|
|
}
|
|
|
|
func auditLog(s *discordgo.Session, message string) {
|
|
_, err := s.ChannelMessageSend(auditChannel, message)
|
|
if err != nil {
|
|
fmt.Println("==Audit Log==")
|
|
fmt.Println(message)
|
|
fmt.Println(err)
|
|
}
|
|
}
|
|
|
|
func getMemberFromUserFriendlyName(s *discordgo.Session, user string) (*discordgo.Member, error) {
|
|
allMembers, err := getAllMembers(s)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if strings.HasPrefix(user, "@") {
|
|
user = strings.TrimPrefix(user, "@")
|
|
} else if strings.HasSuffix(user, ">") {
|
|
if strings.HasPrefix(user, "<@!") {
|
|
user = strings.TrimSuffix(strings.TrimPrefix(user, "<@!"), ">")
|
|
} else if strings.HasPrefix(user, "<@") {
|
|
user = strings.TrimSuffix(strings.TrimPrefix(user, "<@"), ">")
|
|
}
|
|
}
|
|
if strings.ContainsRune(user, '#') {
|
|
list := strings.Split(user, "#")
|
|
username := strings.Join(list[:len(list)-1], "#")
|
|
discriminator := list[len(list)-1]
|
|
for _, v := range allMembers {
|
|
if v.User.Username == username && v.User.Discriminator == discriminator {
|
|
return v, nil
|
|
}
|
|
}
|
|
}
|
|
for _, v := range allMembers {
|
|
if v.User.ID == user {
|
|
return v, nil
|
|
}
|
|
}
|
|
for _, v := range allMembers {
|
|
if v.Nick == user {
|
|
return v, nil
|
|
}
|
|
}
|
|
for _, v := range allMembers {
|
|
if v.User.Username == user {
|
|
return v, nil
|
|
}
|
|
}
|
|
return nil, errMemberNotFound
|
|
}
|
|
|
|
func getAllMembers(s *discordgo.Session) ([]*discordgo.Member, error) {
|
|
initial, err := s.GuildMembers(guildID, "", 1000)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
next := initial[len(initial)-1].User.ID
|
|
for next != "" {
|
|
nextArray, err := s.GuildMembers(guildID, next, 1000)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if len(nextArray) == 0 {
|
|
next = ""
|
|
} else {
|
|
next = nextArray[len(nextArray)-1].User.ID
|
|
initial = append(initial, nextArray...)
|
|
}
|
|
}
|
|
return initial, nil
|
|
}
|