mirror of
https://github.com/Luzifer/discord-community.git
synced 2024-12-20 18:31:23 +00:00
Add user protection to cleanchannel module
Signed-off-by: Knut Ahlers <knut@ahlers.me>
This commit is contained in:
parent
8dc637e41e
commit
b8090d9a52
2 changed files with 37 additions and 1 deletions
|
@ -5,6 +5,7 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/Luzifer/go_helpers/v2/str"
|
||||||
"github.com/bwmarrin/discordgo"
|
"github.com/bwmarrin/discordgo"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/robfig/cron/v3"
|
"github.com/robfig/cron/v3"
|
||||||
|
@ -46,7 +47,10 @@ func (m *modClearChannel) Initialize(crontab *cron.Cron, discord *discordgo.Sess
|
||||||
|
|
||||||
func (m modClearChannel) cronClearChannel() {
|
func (m modClearChannel) cronClearChannel() {
|
||||||
var (
|
var (
|
||||||
after = "0"
|
after = "0"
|
||||||
|
err error
|
||||||
|
onlyUsers []string
|
||||||
|
protectUsers []string
|
||||||
|
|
||||||
// @attr discord_channel_id required string "" ID of the Discord channel to clean up
|
// @attr discord_channel_id required string "" ID of the Discord channel to clean up
|
||||||
channelID = m.attrs.MustString("discord_channel_id", nil)
|
channelID = m.attrs.MustString("discord_channel_id", nil)
|
||||||
|
@ -54,6 +58,26 @@ func (m modClearChannel) cronClearChannel() {
|
||||||
retention = m.attrs.MustDuration("retention", nil)
|
retention = m.attrs.MustDuration("retention", nil)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// @attr only_users optional []string "[]" When this list contains user IDs, only posts authored by those IDs will be deleted
|
||||||
|
onlyUsers, err = m.attrs.StringSlice("only_users")
|
||||||
|
switch err {
|
||||||
|
case nil, errValueNotSet:
|
||||||
|
// This is fine
|
||||||
|
default:
|
||||||
|
log.WithError(err).Error("Unable to load value for only_users")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// @attr protect_users optional []string "[]" When this list contains user IDs, posts authored by those IDs will not be deleted
|
||||||
|
protectUsers, err = m.attrs.StringSlice("protect_users")
|
||||||
|
switch err {
|
||||||
|
case nil, errValueNotSet:
|
||||||
|
// This is fine
|
||||||
|
default:
|
||||||
|
log.WithError(err).Error("Unable to load value for protect_users")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
for {
|
for {
|
||||||
msgs, err := m.discord.ChannelMessages(channelID, 100, "", after, "")
|
msgs, err := m.discord.ChannelMessages(channelID, 100, "", after, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -83,6 +107,16 @@ func (m modClearChannel) cronClearChannel() {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(onlyUsers) > 0 && !str.StringInSlice(msg.Author.ID, onlyUsers) {
|
||||||
|
// Is not written by one of the users we may purge
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(protectUsers) > 0 && str.StringInSlice(msg.Author.ID, protectUsers) {
|
||||||
|
// Is written by protected user, we may not purge
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
if err = m.discord.ChannelMessageDelete(channelID, msg.ID); err != nil {
|
if err = m.discord.ChannelMessageDelete(channelID, msg.ID); err != nil {
|
||||||
log.WithError(err).Error("Unable to delete messages")
|
log.WithError(err).Error("Unable to delete messages")
|
||||||
return
|
return
|
||||||
|
|
|
@ -25,6 +25,8 @@ Cleans up old messages from a channel (for example announcement channel) which a
|
||||||
| `discord_channel_id` | ✅ | string | | ID of the Discord channel to clean up |
|
| `discord_channel_id` | ✅ | string | | ID of the Discord channel to clean up |
|
||||||
| `retention` | ✅ | duration | | How long to keep messages in this channel |
|
| `retention` | ✅ | duration | | How long to keep messages in this channel |
|
||||||
| `cron` | | string | `0 * * * *` | When to execute the cleaner |
|
| `cron` | | string | `0 * * * *` | When to execute the cleaner |
|
||||||
|
| `only_users` | | []string | `[]` | When this list contains user IDs, only posts authored by those IDs will be deleted |
|
||||||
|
| `protect_users` | | []string | `[]` | When this list contains user IDs, posts authored by those IDs will not be deleted |
|
||||||
|
|
||||||
## Type: `liveposting`
|
## Type: `liveposting`
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue