go: Refactor messageutil.go

master
Luther Wen Xu 2019-10-12 21:49:41 +07:00
parent cc2c90c4e3
commit e181a09b4b
Signed by untrusted user: chanbakjsd
GPG Key ID: B7D77E3E9D102B70
8 changed files with 284 additions and 255 deletions

@ -4,8 +4,33 @@ package config
const UsageTitle = "使用方法Command Usage"
const UsageColour = 0xF00000
const ErrorStack = "纠错信息Debug Info"
const ErrorColour = 0xE00000
const SuccessTitle = "成功Success"
const SuccessColour = 0x00E000
const PermissionErrorTitle = "没有权限Forbidden"
const ErrorCannotFindMember = "请确保你已经加入伺服器。Please make sure that you're in the server."
const ErrorMustNotBeMember = "这个指令不能被会员使用。This command cannot be used by server members."
const ErrorMustBeMember = "这个指令只能在成为会员后使用。This command can only be used by server members."
const ErrorMustDMTitle = "私信保护 DM Protection"
const ErrorMustDMDescription = "<@%s>,这个指令只能在私信中使用。<@%s>, this command can only be used in DMs."
const AuditInfoTitle = "记录Audit Info"
const AuditInfoColour = 0xA0A0A0
const InternalErrorDescription = "发生了不明错误。An unknown error has occurred."
//==Vote==
const VoteErrorTitle = "投票错误Vote Error"
const ErrorForceRejectionReuse = "您在这个月内已使用过:x:。请选择其他选项。\nYou have used :x: this month. Please choose another option."
const ErrorVoteHasEnded = "无法投票给已经结束的投票。\nCannot vote in a vote that has already ended."
const VoteSuccessfulTitle = "投票成功Voted Successfully"
const VoteSuccessfulVoteID = "投票编号Vote ID"
const VoteSuccessfulVoteName = "投票名称Vote Name"
const VoteSuccessfulDetectedVote = "所投的票Your Vote"
const VoteSuggestionNote = "\n备注这个系统即将被一个指令代替。\nNote: This system is going to be replaced by a command soon."
const VoteSuggestionErrorTitle = "开始新的投票错误Vote Suggestion Error"
const ErrorVoteSuggestionNotEnoughInfo = "请提供更多资料。\nPlease provide more information."
const ErrorVoteSuggestionTooLong = "你投票的内容过长了。请使用少过500个字符。\nYour vote is too long. Please use a maximum of 500 characters."
const ErrorVoteSuggestionUnknownType = "未知投票种类Unknown Vote Type: %s"
//==Commands==
const SendAsUsage = "!sendas <频道ID> <信息>\n!sendas <channel ID> <message>"
@ -23,3 +48,11 @@ const VTLSingleUserServerTotal = "伺服器总分 Server Total"
const VTLSingleUserPercentage = "百分比 Percentage"
const VTLGlobalTitle = "伺服器信誉分报告 Server Trust Score Report"
const VTLGlobalFieldFormat = "%.1f/%.1f (%.2f%%)"
const ValidateUsage = "!validate <验证码> <为自己拉票的字>\n!validate <validation code> <reason you should be accepted>"
const ValidateSuccess = "已向验证码制造者发送了请求。\nSent a request to use the validation code to its creator."
const ErrorValidateTitle = "验证错误Validation Error"
const ErrorValidationCodeReuse = "该验证码已被使用过。请向验证码制造者要求新的验证码。\nThis validation code has been used before. Please request a new one from its creator."
const ErrorValidationCodeNotExist = "该验证码不存在。请使用一位会员给你的验证码。\nThis validation code doesn't exist. Please use one given by a member."
const ErrorValidationCodeNotOwnedByMember = "验证码制造者不是会员。\nvalidation code creator is no longer a member."
const ErrorValidationCodeCreatorDisabledPM = "验证码制造者关闭了私信。\nValidation code creator did not enable DMs."

@ -61,3 +61,12 @@ func (e *embed) Build() *discordgo.MessageEmbed {
func (e *embed) Send(s *discordgo.Session, channelID string) {
s.ChannelMessageSendEmbed(channelID, e.Build())
}
func (e *embed) SendPM(s *discordgo.Session, userID string) {
channel, err := s.UserChannelCreate(userID)
if err != nil {
auditError(s, "", err)
return
}
e.Send(s, channel.ID)
}

@ -2,7 +2,6 @@ package modules
import (
"fmt"
"strings"
"github.com/bwmarrin/discordgo"
@ -17,13 +16,8 @@ type invite struct {
Reason string
}
func createInvite(s *discordgo.Session, m *discordgo.MessageCreate, command []string) {
if !enforceDM(s, m) {
return
}
if !membersOnly(s, m) {
return
}
var createInvite = enforceDM(memberFilter(true,
func(s *discordgo.Session, m *discordgo.MessageCreate, command []string) {
if len(command) < 2 {
s.ChannelMessageSend(m.ChannelID, "指令的使用方法是`!invite <你所要设置的验证码>`.\nUsage: `!invite <validation code>`")
return
@ -64,41 +58,32 @@ func createInvite(s *discordgo.Session, m *discordgo.MessageCreate, command []st
"不明错误已发生,请把这个错误信息发在群里。\nAn unknown error has occurred. Please pass this error message on.\n"+err.Error(),
)
}
}
},
))
func checkUseInvite(s *discordgo.Session, m *discordgo.MessageCreate, command []string) {
if !enforceDM(s, m) {
return
}
if !nonMembersOnly(s, m) {
return
}
s.ChannelMessageDelete(m.ChannelID, m.ID)
if len(command) < 3 {
sendPrivateMessage(s, m.Author.ID, "指令的使用方法是`!validate <验证码> <原因>`.\nUsage: `!validate <validation code> <reason>`")
return
}
messageSplit := strings.SplitN(m.Content, " ", 3)
inviter, err := db.GetInviteOwner(messageSplit[1])
var checkUseInvite = enforceDM(memberFilter(false, enforceArgumentCount(
config.ValidateUsage, 3,
func(s *discordgo.Session, m *discordgo.MessageCreate, command []string) {
inviter, err := db.GetInviteOwner(command[1])
if err == db.ErrInviteUsed {
sendPrivateMessage(s, m.Author.ID, "该验证码已被使用过。请向验证码制造者要求新的验证码。\nThis validation code has been used before. Please request a new one.")
initNewEmbed(config.ErrorValidateTitle, config.ErrorValidationCodeReuse, config.ErrorColour).
Send(s, m.ChannelID)
return
}
if err == db.ErrNotFound {
sendPrivateMessage(s, m.Author.ID, "该验证码不存在。请使用存在的验证码。\nThis validation code doesn't exist. Please use an existing one.")
initNewEmbed(config.ErrorValidateTitle, config.ErrorValidationCodeNotExist, config.ErrorColour).
SendPM(s, m.ChannelID)
return
}
if err != nil {
sendPrivateMessage(s, m.Author.ID, "错误已发生。请稍候尝试。\nAn error has occurred. Please try again later.")
auditLog(s, err.Error())
auditError(s, m.ChannelID, err)
return
}
db.UseInvite(messageSplit[1])
db.UseInvite(command[1])
member, err := s.GuildMember(config.GuildID, inviter)
if err != nil {
sendPrivateMessage(s, m.Author.ID, "验证码制造者不是会员。\nValidation code creator is no longer a member.")
auditErrorPM(s, m.ChannelID, err)
return
}
@ -109,28 +94,32 @@ func checkUseInvite(s *discordgo.Session, m *discordgo.MessageCreate, command []
}
}
if !isMember {
sendPrivateMessage(s, m.Author.ID, "验证码制造者不是会员。\nValidation code creator is no longer a member.")
initNewEmbed(config.ErrorValidateTitle, config.ErrorValidationCodeNotOwnedByMember, config.ErrorColour).
SendPM(s, m.ChannelID)
return
}
channel, err := s.UserChannelCreate(inviter)
if err != nil {
sendPrivateMessage(s, m.Author.ID, "验证码制造者关闭了私信。\nValidation code creator did not enable DMs.")
initNewEmbed(config.ErrorValidateTitle, config.ErrorValidationCodeCreatorDisabledPM, config.ErrorColour).
SendPM(s, m.ChannelID)
return
}
msg, err := s.ChannelMessageSend(channel.ID, fmt.Sprintf("<@%s>正在尝试使用验证码%s。请问是否同意该使用", m.Author.ID, messageSplit[1]))
msg, err := s.ChannelMessageSend(channel.ID, fmt.Sprintf("<@%s>正在尝试使用验证码%s。请问是否同意该使用", m.Author.ID, command[1]))
if err != nil {
sendPrivateMessage(s, m.Author.ID, "验证码制造者关闭了私信。\nValidation code creator did not enable DMs.")
auditErrorPM(s, m.ChannelID, err)
return
}
pendingInviteConfirmation[msg.ID] = invite{
User: m.Author.ID,
Reason: messageSplit[2],
Reason: command[2],
}
s.MessageReactionAdd(channel.ID, msg.ID, emojiX)
s.MessageReactionAdd(channel.ID, msg.ID, emojiCheck)
sendPrivateMessage(s, m.Author.ID, "已向验证码制造者发送了请求。\nSent a request to use the validation code to its creator.")
}
initNewEmbed(config.SuccessTitle, config.ValidateSuccess, config.SuccessColour).
SendPM(s, m.ChannelID)
},
)))
func CheckForInvite(s *discordgo.Session, r *discordgo.MessageReactionAdd) {
if r.UserID == s.State.User.ID {
@ -156,21 +145,15 @@ func CheckForInvite(s *discordgo.Session, r *discordgo.MessageReactionAdd) {
msg, err := s.ChannelMessageSend(config.VoteChannel, "正在准备新的一个投票…… Preparing for the next vote...")
if err != nil {
sendPrivateMessage(s, r.UserID, "创造投票失败。Failed to create vote.")
auditLog(s,
fmt.Sprintf("Error occurred while creating vote for <@%s>.\n%v\nError: %s", r.UserID, *r, err.Error()),
)
auditErrorPM(s, r.UserID, err)
return
}
id, err := db.CreateInviteVote(msg.ID, invite.User, invite.Reason)
if err != nil {
sendPrivateMessage(s, r.UserID, "创造投票失败。Failed to create vote.")
auditLog(s,
fmt.Sprintf("Error occurred while creating vote for <@%s>.\n%v\nError: %s", r.UserID, *r, err.Error()),
)
auditErrorPM(s, r.UserID, err)
return
}
auditLog(s, fmt.Sprintf("Vote ID %d has been created by <@%s>.", id, r.UserID))
auditInfo(s, fmt.Sprintf("Vote ID %d has been created by <@%s>.", id, r.UserID))
s.ChannelMessageEdit(config.VoteChannel, msg.ID, "")
s.ChannelMessageEditEmbed(config.VoteChannel, msg.ID, createInviteEmbed(id, invite.User+":"+invite.Reason))
s.MessageReactionAdd(config.VoteChannel, msg.ID, emojiX)

@ -11,82 +11,55 @@ import (
"TerraOceanBot/discord/config"
)
func enforceDM(s *discordgo.Session, m *discordgo.MessageCreate) bool {
func enforceDM(passOn CommandHandler) CommandHandler {
return func(s *discordgo.Session, m *discordgo.MessageCreate, command []string) {
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(config.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 == config.MemberRoleID {
return true
initNewEmbed(
config.ErrorMustDMTitle,
fmt.Sprintf(config.ErrorMustDMDescription, m.Author.ID, m.Author.ID),
config.ErrorColour,
).Send(s, m.ChannelID)
return
}
passOn(s, m, command)
}
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 {
func memberFilter(mustBeMember bool, passOn CommandHandler) CommandHandler {
return func(s *discordgo.Session, m *discordgo.MessageCreate, command []string) {
member, err := s.GuildMember(config.GuildID, m.Author.ID)
if err != nil {
return false
initNewEmbed(config.PermissionErrorTitle, config.ErrorCannotFindMember, config.ErrorColour).
Send(s, m.ChannelID)
return
}
for _, v := range member.Roles {
if v == config.MemberRoleID {
s.ChannelMessageSend(
m.ChannelID,
m.Author.Mention()+",该指令只能被非会员使用。\n"+m.Author.Mention()+", this command can only be used by non-member.",
)
return false
if mustBeMember {
passOn(s, m, command)
} else {
initNewEmbed(config.PermissionErrorTitle, config.ErrorMustNotBeMember, config.ErrorColour).
Send(s, m.ChannelID)
}
return
}
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(config.AuditChannel, message)
if err != nil {
fmt.Println("==Audit Log==")
fmt.Println(message)
fmt.Println(err)
if mustBeMember {
initNewEmbed(config.PermissionErrorTitle, config.ErrorMustBeMember, config.ErrorColour).
Send(s, m.ChannelID)
} else {
passOn(s, m, command)
}
}
}
func enforceArgumentCount(usage string, count int, passOn CommandHandler) CommandHandler {
return func(s *discordgo.Session, m *discordgo.MessageCreate, command []string) {
if len(command) < count {
s.ChannelMessageSendEmbed(
m.ChannelID,
newEmbed().SetTitle(config.UsageTitle).SetDescription(usage).SetColour(config.UsageColour).Build(),
)
initNewEmbed(config.UsageTitle, usage, config.UsageColour).
Send(s, m.ChannelID)
return
}
command[count-1] = strings.Join(command[count-1:], " ")
@ -101,7 +74,32 @@ func sendError(s *discordgo.Session, channelID string, err error) {
if count == 512 {
stack += "..."
}
initNewErrorEmbed(err.Error()).AddField(config.ErrorStack, stack).Send(s, channelID)
initNewErrorEmbed(err.Error()).
AddField(config.ErrorStack, stack).
Send(s, channelID)
}
func auditInfo(s *discordgo.Session, message string) {
initNewEmbed(config.AuditInfoTitle, message, config.AuditInfoColour).
Send(s, config.AuditChannel)
}
func auditError(s *discordgo.Session, sourceChannel string, err error) {
if sourceChannel != "" {
initNewErrorEmbed(config.InternalErrorDescription).
Send(s, sourceChannel)
}
sendError(s, config.AuditChannel, err)
}
func auditErrorPM(s *discordgo.Session, sourceUser string, err error) {
channel, channelErr := s.UserChannelCreate(sourceUser)
if channelErr != nil {
auditError(s, "", channelErr)
auditError(s, "", err)
return
}
auditError(s, channel.ID, err)
}
func formatFloat(n float64, precision int) string {

@ -1,7 +1,6 @@
package modules
import (
"fmt"
"strings"
"github.com/bwmarrin/discordgo"
@ -12,13 +11,8 @@ import (
var trustMessage = make(map[string]string)
func changeTrust(s *discordgo.Session, m *discordgo.MessageCreate, command []string) {
if !enforceDM(s, m) {
return
}
if !membersOnly(s, m) {
return
}
var changeTrust = enforceDM(memberFilter(true,
func(s *discordgo.Session, m *discordgo.MessageCreate, command []string) {
if len(command) < 2 {
s.ChannelMessageSend(m.ChannelID, "指令的使用方法是`!trust <你要改信任度的人>`.\nUsage: `!trust <the user>`")
return
@ -30,7 +24,7 @@ func changeTrust(s *discordgo.Session, m *discordgo.MessageCreate, command []str
return
}
if err != nil {
auditLog(s, fmt.Sprintf("Error while processing change trust request for <@%s>: %s", m.Author.ID, err.Error()))
auditError(s, m.ChannelID, err)
return
}
@ -39,7 +33,7 @@ func changeTrust(s *discordgo.Session, m *discordgo.MessageCreate, command []str
createTrustEmbed(member.User.Username+"#"+member.User.Discriminator, member.Nick),
)
if err != nil {
auditLog(s, fmt.Sprintf("Error while sending change trust request for <@%s>: %s", m.Author.ID, err.Error()))
auditError(s, m.ChannelID, err)
return
}
@ -51,7 +45,8 @@ func changeTrust(s *discordgo.Session, m *discordgo.MessageCreate, command []str
s.MessageReactionAdd(m.ChannelID, message.ID, emojiFour)
s.MessageReactionAdd(m.ChannelID, message.ID, emojiFive)
s.MessageReactionAdd(m.ChannelID, message.ID, emojiCheck)
}
},
))
func createTrustEmbed(username, nick string) *discordgo.MessageEmbed {
embed := newEmbed().SetColour(0x00FFFF).SetTitle("更新玩家评分Update Player Score").AddField("ID", username)
@ -89,7 +84,7 @@ func CheckForTrustUpdate(s *discordgo.Session, r *discordgo.MessageReactionAdd)
case emojiCheck:
value = db.NuclearOptionVote
default:
auditLog(s, "Reaction "+r.Emoji.Name+" was added to trust message ID "+r.MessageID)
auditInfo(s, "Reaction "+r.Emoji.Name+" was added to trust message ID "+r.MessageID)
return
}
@ -99,7 +94,7 @@ func CheckForTrustUpdate(s *discordgo.Session, r *discordgo.MessageReactionAdd)
return
}
if err != nil {
auditLog(s, fmt.Sprintf("Error while changing the trust value for <@%s> with target <@%s>: %s", r.UserID, target, err.Error()))
auditError(s, r.ChannelID, err)
return
}

@ -46,7 +46,7 @@ func CheckForVote(s *discordgo.Session, r *discordgo.MessageReactionAdd) {
return
}
if err != nil {
auditLog(s, "Error while checking for vote: "+err.Error())
auditError(s, r.ChannelID, err)
return
}
@ -69,18 +69,20 @@ func CheckForVote(s *discordgo.Session, r *discordgo.MessageReactionAdd) {
case emojiCheck:
value = db.NuclearOptionVote
default:
auditLog(s, "Reaction "+r.Emoji.Name+" was added to vote #"+strconv.Itoa(voteID))
auditInfo(s, "Reaction "+r.Emoji.Name+" was added to vote #"+strconv.Itoa(voteID))
return
}
err = db.UpdateVote(voteID, r.UserID, value)
if err == db.ErrForceRejectionVoteReuse {
sendPrivateMessage(s, r.UserID, "您在这个月内已使用过:x:。请选择其他选项。\nYou have used :x: this month. Please choose another option.")
initNewEmbed(config.VoteErrorTitle, config.ErrorForceRejectionReuse, config.ErrorColour).
SendPM(s, r.UserID)
return
}
if err == db.ErrVoteIsOver {
sendPrivateMessage(s, r.UserID, "这个投票已结束。你投的票没有被记录。\nThe vote is over so your vote is not recorded.")
initNewEmbed(config.VoteErrorTitle, config.ErrorVoteHasEnded, config.ErrorColour).
SendPM(s, r.UserID)
return
}
@ -90,29 +92,39 @@ func CheckForVote(s *discordgo.Session, r *discordgo.MessageReactionAdd) {
}
if err != nil {
sendPrivateMessage(s, r.UserID, "一个错误已发生,请重新尝试。\nAn error has occurred while voting. Please try again.")
auditLog(s,
fmt.Sprintf("Error occurred while processing vote for <@%s>.\n%v\nError: %s", r.UserID, *r, err.Error()),
)
auditErrorPM(s, r.UserID, err)
return
}
sendPrivateMessage(s, r.UserID, "您投票已成功。\nYou have voted successfully.\n名字Vote Name: "+voteName+"\n目前投的票 :"+r.Emoji.Name+":")
auditLog(s, fmt.Sprintf("<@%s> has chosen %s for vote ID %d.", r.UserID, r.Emoji.Name, voteID))
initNewEmbed(config.VoteSuccessfulTitle, "", config.SuccessColour).
AddField(config.VoteSuccessfulVoteID, strconv.Itoa(voteID)).
AddField(config.VoteSuccessfulVoteName, voteName).
AddField(config.VoteSuccessfulDetectedVote, r.Emoji.Name).
SendPM(s, r.UserID)
auditInfo(s, fmt.Sprintf("<@%s> has chosen %s for vote ID %d.", r.UserID, r.Emoji.Name, voteID))
checkForVoteResult(s, voteID)
}
//TODO Replace with a command.
func VoteSuggestion(s *discordgo.Session, m *discordgo.MessageCreate) {
s.ChannelMessageDelete(m.ChannelID, m.ID)
args := strings.SplitN(m.Content, " ", 2)
if len(args) == 1 {
sendPrivateMessage(s, m.Author.ID, "请提供更多资料。\nPlease provide more information.")
initNewEmbed(
config.VoteSuggestionErrorTitle,
config.ErrorVoteSuggestionNotEnoughInfo+config.VoteSuggestionNote,
config.ErrorColour,
).SendPM(s, m.Author.ID)
return
}
if len(args[1]) > 500 {
sendPrivateMessage(s, m.Author.ID, "你投票的内容过长了。请使用少过500个字符。\nYour vote is too long. Please use a maximum of 500 characters.")
initNewEmbed(
config.VoteSuggestionErrorTitle,
config.ErrorVoteSuggestionTooLong+config.VoteSuggestionNote,
config.ErrorColour,
).SendPM(s, m.Author.ID)
return
}
@ -120,21 +132,15 @@ func VoteSuggestion(s *discordgo.Session, m *discordgo.MessageCreate) {
case "custom":
msg, err := s.ChannelMessageSend(config.VoteChannel, "正在准备新的一个投票…… Preparing for the next vote...")
if err != nil {
sendPrivateMessage(s, m.Author.ID, "创造投票失败。Failed to create vote.")
auditLog(s,
fmt.Sprintf("Error occurred while creating vote for <@%s>.\n%v\nError: %s", m.Author.ID, *m, err.Error()),
)
auditErrorPM(s, m.Author.ID, err)
return
}
id, err := db.CreateCustomVote(msg.ID, args[1])
if err != nil {
sendPrivateMessage(s, m.Author.ID, "创造投票失败。Failed to create vote.")
auditLog(s,
fmt.Sprintf("Error occurred while creating vote for <@%s>.\n%v\nError: %s", m.Author.ID, *m, err.Error()),
)
auditErrorPM(s, m.Author.ID, err)
return
}
auditLog(s, fmt.Sprintf("Vote ID %d has been created by <@%s>.", id, m.Author.ID))
auditInfo(s, fmt.Sprintf("Vote ID %d has been created by <@%s>.", id, m.Author.ID))
s.ChannelMessageEdit(config.VoteChannel, msg.ID, "")
s.ChannelMessageEditEmbed(config.VoteChannel, msg.ID, createCustomEmbed(id, args[1]))
s.MessageReactionAdd(config.VoteChannel, msg.ID, emojiOne)
@ -143,7 +149,11 @@ func VoteSuggestion(s *discordgo.Session, m *discordgo.MessageCreate) {
s.MessageReactionAdd(config.VoteChannel, msg.ID, emojiFour)
s.MessageReactionAdd(config.VoteChannel, msg.ID, emojiFive)
default:
sendPrivateMessage(s, m.Author.ID, "未知投票种类:"+args[0]+"\nUnknown vote type: "+args[0])
initNewEmbed(
config.VoteSuggestionErrorTitle,
fmt.Sprintf(config.ErrorVoteSuggestionUnknownType, args[1])+config.VoteSuggestionNote,
config.ErrorColour,
).SendPM(s, m.Author.ID)
}
}

@ -25,18 +25,18 @@ func handleInviteResult(s *discordgo.Session, id int, name string, isPositive bo
}
member, err := backend.GetMemberFromUserFriendlyName(s, strings.SplitN(name, ":", 2)[0])
if err != nil {
auditLog(s, "Error while getting member from user friendly name in invite result. "+err.Error())
auditError(s, "", err)
return
}
err = s.GuildMemberRoleAdd(config.GuildID, member.User.ID, config.MemberRoleID)
if err != nil {
auditLog(s, fmt.Sprintf("Fail to give user <@%s> the member role: %s", member.User.ID, err.Error()))
auditError(s, "", err)
return
}
s.ChannelMessageSend(announceInviteChannel, fmt.Sprintf("欢迎<@%s>的加入Welcome <@%s> to this server!", member.User.ID, member.User.ID))
choices, err := db.GetAllVoteChoices(id)
if err != nil {
auditLog(s, "Error while pulling vote choices. "+err.Error())
auditError(s, "", err)
return
}
for _, choice := range choices {

@ -24,9 +24,10 @@ func ListenToVoteFinishes(s *discordgo.Session) {
for {
voteMutex.Lock()
for _, v := range toAnnounceResultList {
auditLog(s, fmt.Sprintf("Announcing the result of vote %d.", v.VoteID))
auditInfo(s, fmt.Sprintf("Announcing the result of vote %d.", v.VoteID))
if err := db.FinishVote(v.VoteID); err != nil {
auditLog(s, fmt.Sprintf("Error while finishing vote %d.", v.VoteID))
auditError(s, "", err)
continue
}
voteType, _ := db.GetVoteType(v.VoteID)
voteName, _ := db.GetVoteName(v.VoteID)
@ -43,7 +44,7 @@ func ListenToVoteFinishes(s *discordgo.Session) {
func checkForVoteResult(s *discordgo.Session, id int) {
votes, err := db.GetAllVoteChoices(id)
if err != nil {
auditLog(s, fmt.Sprintf("Error while calculating vote result for ID %d: %s", id, err.Error()))
auditError(s, "", err)
return
}
var currentScore, totalTrust float64
@ -54,7 +55,7 @@ func checkForVoteResult(s *discordgo.Session, id int) {
}
trust, err := backend.GetTrust(s, vote.UserID)
if err != nil {
auditLog(s, fmt.Sprintf("Error while getting vote trust for user ID %d: %s", vote.UserID, err.Error()))
auditError(s, "", err)
return
}
currentScore += float64(vote.Value) * trust
@ -63,7 +64,7 @@ func checkForVoteResult(s *discordgo.Session, id int) {
totalGlobalTrust, err := backend.GetTotalTrust(s)
if err != nil {
auditLog(s, fmt.Sprintf("Error while getting total vote trust: %s", err.Error()))
auditError(s, "", err)
return
}
remainingTrust := totalGlobalTrust - totalTrust
@ -80,7 +81,7 @@ func checkForVoteResult(s *discordgo.Session, id int) {
return
}
}
auditLog(s, fmt.Sprintf("Rejection of vote ID %d has been confirmed.", id))
auditInfo(s, fmt.Sprintf("Rejection of vote ID %d has been confirmed.", id))
toAnnounceResultList = append(toAnnounceResultList, confirmedResult{
VoteID: id,
IsPositive: false,
@ -97,7 +98,7 @@ func checkForVoteResult(s *discordgo.Session, id int) {
return
}
}
auditLog(s, fmt.Sprintf("Acceptance of vote ID %d has been confirmed.", id))
auditInfo(s, fmt.Sprintf("Acceptance of vote ID %d has been confirmed.", id))
toAnnounceResultList = append(toAnnounceResultList, confirmedResult{
VoteID: id,
IsPositive: true,