mirror of
https://github.com/hrfee/jfa-go.git
synced 2024-12-22 17:10:10 +00:00
discord: option to add/remove role on enable/disable/deletion
in Settings > Discord, shown when a role is selected in "Apply Role". The discord housekeeping daemon should pick up users deleted outide of jfa-go too, so users who delete their own accounts should have their roles removed (periodically).
This commit is contained in:
parent
44311162a6
commit
ffd46ff190
@ -1120,6 +1120,15 @@
|
|||||||
"value": "",
|
"value": "",
|
||||||
"description": "Add the selected role to a user when they sign up."
|
"description": "Add the selected role to a user when they sign up."
|
||||||
},
|
},
|
||||||
|
"disable_enable_role": {
|
||||||
|
"name": "Remove/add role on user enable/disable/deletion",
|
||||||
|
"required": false,
|
||||||
|
"requires_restart": true,
|
||||||
|
"depends_true": "apply_role",
|
||||||
|
"type": "bool",
|
||||||
|
"value": false,
|
||||||
|
"description": "When a user is disabled or deleted, remove the Discord role, and when re-enabled, add it back."
|
||||||
|
},
|
||||||
"language": {
|
"language": {
|
||||||
"name": "Language",
|
"name": "Language",
|
||||||
"required": false,
|
"required": false,
|
||||||
|
18
discord.go
18
discord.go
@ -167,6 +167,24 @@ func (d *DiscordDaemon) ApplyRole(userID string) error {
|
|||||||
return d.bot.GuildMemberRoleAdd(d.guildID, userID, d.roleID)
|
return d.bot.GuildMemberRoleAdd(d.guildID, userID, d.roleID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RemoveRole removes the member role to the given user if set.
|
||||||
|
func (d *DiscordDaemon) RemoveRole(userID string) error {
|
||||||
|
if d.roleID == "" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return d.bot.GuildMemberRoleRemove(d.guildID, userID, d.roleID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetRoleDisabled removes the role if "disabled", and applies if "!disabled".
|
||||||
|
func (d *DiscordDaemon) SetRoleDisabled(userID string, disabled bool) (err error) {
|
||||||
|
if disabled {
|
||||||
|
err = d.RemoveRole(userID)
|
||||||
|
} else {
|
||||||
|
err = d.ApplyRole(userID)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// NewTempInvite creates an invite link, and returns the invite URL, as well as the URL for the server icon.
|
// NewTempInvite creates an invite link, and returns the invite URL, as well as the URL for the server icon.
|
||||||
func (d *DiscordDaemon) NewTempInvite(ageSeconds, maxUses int) (inviteURL, iconURL string) {
|
func (d *DiscordDaemon) NewTempInvite(ageSeconds, maxUses int) (inviteURL, iconURL string) {
|
||||||
var inv *dg.Invite
|
var inv *dg.Invite
|
||||||
|
@ -36,6 +36,8 @@ func (app *appContext) clearDiscord() {
|
|||||||
// Make sure the user doesn't exist, and no other error has occured
|
// Make sure the user doesn't exist, and no other error has occured
|
||||||
switch err.(type) {
|
switch err.(type) {
|
||||||
case mediabrowser.ErrUserNotFound:
|
case mediabrowser.ErrUserNotFound:
|
||||||
|
// Remove role in case their account was deleted oustide of jfa-go
|
||||||
|
app.discord.RemoveRole(discordUser.MethodID().(string))
|
||||||
app.storage.DeleteDiscordKey(discordUser.JellyfinID)
|
app.storage.DeleteDiscordKey(discordUser.JellyfinID)
|
||||||
default:
|
default:
|
||||||
continue
|
continue
|
||||||
|
@ -167,7 +167,7 @@ const (
|
|||||||
UserExists = "user already exists"
|
UserExists = "user already exists"
|
||||||
AccountLinked = "account already linked and require_unique enabled"
|
AccountLinked = "account already linked and require_unique enabled"
|
||||||
AccountUnverified = "unverified"
|
AccountUnverified = "unverified"
|
||||||
FailedSetDiscordMemberRole = "Failed to set " + Discord + " member role: %v"
|
FailedSetDiscordMemberRole = "Failed to apply/remove " + Discord + " member role: %v"
|
||||||
|
|
||||||
FailedSetEmailAddress = "Failed to set email address for %s user \"%s\": %v"
|
FailedSetEmailAddress = "Failed to set email address for %s user \"%s\": %v"
|
||||||
|
|
||||||
|
14
users.go
14
users.go
@ -174,7 +174,12 @@ func (app *appContext) SetUserDisabled(user mediabrowser.User, disabled bool) (e
|
|||||||
}
|
}
|
||||||
|
|
||||||
if app.discord != nil && app.config.Section("discord").Key("disable_enable_role").MustBool(false) {
|
if app.discord != nil && app.config.Section("discord").Key("disable_enable_role").MustBool(false) {
|
||||||
// FIXME: Un-apply role
|
cmUser, ok := app.storage.GetDiscordKey(user.ID)
|
||||||
|
if ok {
|
||||||
|
if err := app.discord.SetRoleDisabled(cmUser.MethodID().(string), disabled); err != nil {
|
||||||
|
app.err.Printf(lm.FailedSetDiscordMemberRole, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -198,7 +203,12 @@ func (app *appContext) DeleteUser(user mediabrowser.User) (err error, deleted bo
|
|||||||
}
|
}
|
||||||
|
|
||||||
if app.discord != nil && app.config.Section("discord").Key("disable_enable_role").MustBool(false) {
|
if app.discord != nil && app.config.Section("discord").Key("disable_enable_role").MustBool(false) {
|
||||||
// FIXME: Un-apply role
|
cmUser, ok := app.storage.GetDiscordKey(user.ID)
|
||||||
|
if ok {
|
||||||
|
if err := app.discord.RemoveRole(cmUser.MethodID().(string)); err != nil {
|
||||||
|
app.err.Printf(lm.FailedSetDiscordMemberRole, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
status, err = app.jf.DeleteUser(user.ID)
|
status, err = app.jf.DeleteUser(user.ID)
|
||||||
|
Loading…
Reference in New Issue
Block a user