mostly nsfw owner stuff and kvstore persistence.
This commit is contained in:
62
adapters.go
Normal file
62
adapters.go
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/kf5grd/keybasebot"
|
||||||
|
"samhofi.us/x/keybase/v2"
|
||||||
|
"samhofi.us/x/keybase/v2/types/chat1"
|
||||||
|
)
|
||||||
|
|
||||||
|
func nsfwFilter() keybasebot.Adapter {
|
||||||
|
return func(action keybasebot.BotAction) keybasebot.BotAction {
|
||||||
|
return func(m chat1.MsgSummary, b *keybasebot.Bot) (bool, error) {
|
||||||
|
// if its not a team, nsfw is always allowed
|
||||||
|
if m.Channel.MembersType == keybase.USER {
|
||||||
|
b.Logger.Debug("boobs are allowed in %s", m.Channel.Name)
|
||||||
|
return action(m, b)
|
||||||
|
}
|
||||||
|
|
||||||
|
// if the team is in the allowed list, nsfw is allowed
|
||||||
|
if m.Channel.MembersType == keybase.TEAM {
|
||||||
|
data, ok := b.Meta["nsfwAllowed"]
|
||||||
|
if !ok {
|
||||||
|
err := fmt.Errorf("Unable to fetch allowed teams from meta")
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
allowedTeams := data.(map[chat1.ConvIDStr]bool)
|
||||||
|
if isAllowed := allowedTeams[m.ConvID]; isAllowed {
|
||||||
|
return action(m, b)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if the team is not allowed, fail silently
|
||||||
|
b.Logger.Debug("boobs are not allowed in %s", m.Channel.Name)
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func requireOwner() keybasebot.Adapter {
|
||||||
|
return func(action keybasebot.BotAction) keybasebot.BotAction {
|
||||||
|
return func(m chat1.MsgSummary, b *keybasebot.Bot) (bool, error) {
|
||||||
|
b.Logger.Debug("checking owner command auth")
|
||||||
|
// if the team is in the allowed list, nsfw is allowed
|
||||||
|
data, ok := b.Meta["owner"]
|
||||||
|
if !ok {
|
||||||
|
b.Logger.Debug("unable to fetch owner from meta")
|
||||||
|
err := fmt.Errorf("owner command used without owner set")
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
myOwner := data.(string)
|
||||||
|
if m.Sender.Username == myOwner {
|
||||||
|
b.Logger.Debug("owner command approved")
|
||||||
|
return action(m, b)
|
||||||
|
}
|
||||||
|
|
||||||
|
// if the team is not allowed, fail silently
|
||||||
|
b.Logger.Info("@%s tried to user owner command without auth.", m.Sender.Username)
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
10
args.go
10
args.go
@ -14,6 +14,8 @@ type botOptions struct {
|
|||||||
JSON bool `env:"BOT_LOG_JSON" envDefault:"false"`
|
JSON bool `env:"BOT_LOG_JSON" envDefault:"false"`
|
||||||
RedditUser string `env:"BOT_REDDIT_USER" envDefault:""`
|
RedditUser string `env:"BOT_REDDIT_USER" envDefault:""`
|
||||||
RedditPass string `env:"BOT_REDDIT_PASS" envDefault:""`
|
RedditPass string `env:"BOT_REDDIT_PASS" envDefault:""`
|
||||||
|
Owner string `env:"BOT_OWNER" envDefault:""`
|
||||||
|
KvStoreTeam string `env:"BOT_KVSTORE_TEAM" envDefault:""`
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseArgs(args []string) botOptions {
|
func parseArgs(args []string) botOptions {
|
||||||
@ -31,6 +33,8 @@ func parseArgs(args []string) botOptions {
|
|||||||
flags.StringVar(&cliOpts.HomePath, "kbhome", "", "sets alternate keybase home folder for debugging")
|
flags.StringVar(&cliOpts.HomePath, "kbhome", "", "sets alternate keybase home folder for debugging")
|
||||||
flags.StringVar(&cliOpts.RedditUser, "reddit-user", "", "sets the reddit auth user")
|
flags.StringVar(&cliOpts.RedditUser, "reddit-user", "", "sets the reddit auth user")
|
||||||
flags.StringVar(&cliOpts.RedditPass, "reddit-pass", "", "sets the reddit auth password")
|
flags.StringVar(&cliOpts.RedditPass, "reddit-pass", "", "sets the reddit auth password")
|
||||||
|
flags.StringVar(&cliOpts.Owner, "owner", "", "sets the keybase username of the bot owner")
|
||||||
|
flags.StringVar(&cliOpts.KvStoreTeam, "kvstore-team", "", "sets the kvstore team if you want to save configs")
|
||||||
if err := flags.Parse(args[1:]); err != nil {
|
if err := flags.Parse(args[1:]); err != nil {
|
||||||
log.Fatalf("Unable to parse cli args: %+v", err)
|
log.Fatalf("Unable to parse cli args: %+v", err)
|
||||||
}
|
}
|
||||||
@ -54,6 +58,12 @@ func parseArgs(args []string) botOptions {
|
|||||||
if cliOpts.RedditPass != "" {
|
if cliOpts.RedditPass != "" {
|
||||||
opts.RedditPass = cliOpts.RedditPass
|
opts.RedditPass = cliOpts.RedditPass
|
||||||
}
|
}
|
||||||
|
if cliOpts.Owner != "" {
|
||||||
|
opts.Owner = cliOpts.Owner
|
||||||
|
}
|
||||||
|
if cliOpts.KvStoreTeam != "" {
|
||||||
|
opts.KvStoreTeam = cliOpts.KvStoreTeam
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return opts
|
return opts
|
||||||
}
|
}
|
||||||
|
|||||||
33
cmd/boobs.go
Normal file
33
cmd/boobs.go
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/kf5grd/keybasebot"
|
||||||
|
"github.com/teris-io/shortid"
|
||||||
|
"samhofi.us/x/keybase/v2/types/chat1"
|
||||||
|
)
|
||||||
|
|
||||||
|
/*var BoobsAd = chat1.UserBotCommandInput{
|
||||||
|
Name: "eyebleach",
|
||||||
|
Usage: "",
|
||||||
|
Description: "Sends some cute critters",
|
||||||
|
}*/
|
||||||
|
|
||||||
|
func Boobs(m chat1.MsgSummary, b *keybasebot.Bot) (bool, error) {
|
||||||
|
path, desc, err := getRandomRedditMedia(b, "boobs", "top", 100)
|
||||||
|
if err != nil {
|
||||||
|
eid := shortid.MustGenerate()
|
||||||
|
b.Logger.Error("%s: %+v", eid, err)
|
||||||
|
b.KB.ReactByConvID(m.ConvID, m.Id, "Error: %s", eid)
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
// upload the image
|
||||||
|
b.KB.UploadToConversation(m.ConvID, desc, path)
|
||||||
|
// delete the file
|
||||||
|
err = os.Remove(path)
|
||||||
|
if err != nil {
|
||||||
|
b.Logger.Error("Unable to remove file %s", path)
|
||||||
|
}
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
7
go.mod
7
go.mod
@ -4,15 +4,18 @@ go 1.15
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/PuerkitoBio/goquery v1.6.1
|
github.com/PuerkitoBio/goquery v1.6.1
|
||||||
|
github.com/andybalholm/cascadia v1.2.0 // indirect
|
||||||
github.com/beefsack/go-rate v0.0.0-20200827232406-6cde80facd47 // indirect
|
github.com/beefsack/go-rate v0.0.0-20200827232406-6cde80facd47 // indirect
|
||||||
github.com/caarlos0/env v3.5.0+incompatible
|
github.com/caarlos0/env v3.5.0+incompatible
|
||||||
|
github.com/golang/protobuf v1.4.3 // indirect
|
||||||
github.com/google/go-querystring v1.0.0 // indirect
|
github.com/google/go-querystring v1.0.0 // indirect
|
||||||
github.com/google/uuid v1.1.5
|
github.com/google/uuid v1.1.5
|
||||||
github.com/jzelinskie/geddit v0.0.0-20200521013404-78c28c13fba2
|
github.com/jzelinskie/geddit v0.0.0-20200521013404-78c28c13fba2
|
||||||
github.com/kf5grd/keybasebot v1.3.1-0.20210115153557-55a46e5206dc
|
github.com/kf5grd/keybasebot v1.4.1
|
||||||
github.com/stretchr/testify v1.7.0 // indirect
|
github.com/stretchr/testify v1.7.0 // indirect
|
||||||
github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125
|
github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125
|
||||||
golang.org/x/net v0.0.0-20201224014010-6772e930b67b // indirect
|
golang.org/x/net v0.0.0-20201224014010-6772e930b67b // indirect
|
||||||
golang.org/x/oauth2 v0.0.0-20210113205817-d3ed898aa8a3 // indirect
|
golang.org/x/oauth2 v0.0.0-20210113205817-d3ed898aa8a3 // indirect
|
||||||
samhofi.us/x/keybase/v2 v2.0.6
|
google.golang.org/appengine v1.6.7 // indirect
|
||||||
|
samhofi.us/x/keybase/v2 v2.0.8
|
||||||
)
|
)
|
||||||
|
|||||||
14
go.sum
14
go.sum
@ -37,6 +37,8 @@ github.com/PuerkitoBio/goquery v1.6.1 h1:FgjbQZKl5HTmcn4sKBgvx8vv63nhyhIpv7lJpFG
|
|||||||
github.com/PuerkitoBio/goquery v1.6.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
|
github.com/PuerkitoBio/goquery v1.6.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
|
||||||
github.com/andybalholm/cascadia v1.1.0 h1:BuuO6sSfQNFRu1LppgbD25Hr2vLYW25JvxHs5zzsLTo=
|
github.com/andybalholm/cascadia v1.1.0 h1:BuuO6sSfQNFRu1LppgbD25Hr2vLYW25JvxHs5zzsLTo=
|
||||||
github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
|
github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
|
||||||
|
github.com/andybalholm/cascadia v1.2.0 h1:vuRCkM5Ozh/BfmsaTm26kbjm0mIOM3yS5Ek/F5h18aE=
|
||||||
|
github.com/andybalholm/cascadia v1.2.0/go.mod h1:YCyR8vOZT9aZ1CHEd8ap0gMVm2aFgxBp0T0eFw1RUQY=
|
||||||
github.com/beefsack/go-rate v0.0.0-20200827232406-6cde80facd47 h1:M57m0xQqZIhx7CEJgeLSvRFKEK1RjzRuIXiA3HfYU7g=
|
github.com/beefsack/go-rate v0.0.0-20200827232406-6cde80facd47 h1:M57m0xQqZIhx7CEJgeLSvRFKEK1RjzRuIXiA3HfYU7g=
|
||||||
github.com/beefsack/go-rate v0.0.0-20200827232406-6cde80facd47/go.mod h1:6YNgTHLutezwnBvyneBbwvB8C82y3dcoOj5EQJIdGXA=
|
github.com/beefsack/go-rate v0.0.0-20200827232406-6cde80facd47/go.mod h1:6YNgTHLutezwnBvyneBbwvB8C82y3dcoOj5EQJIdGXA=
|
||||||
github.com/caarlos0/env v3.5.0+incompatible h1:Yy0UN8o9Wtr/jGHZDpCBLpNrzcFLLM2yixi/rBrKyJs=
|
github.com/caarlos0/env v3.5.0+incompatible h1:Yy0UN8o9Wtr/jGHZDpCBLpNrzcFLLM2yixi/rBrKyJs=
|
||||||
@ -81,6 +83,8 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq
|
|||||||
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
|
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
|
||||||
github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
|
github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
|
||||||
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||||
|
github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM=
|
||||||
|
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||||
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||||
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||||
@ -137,6 +141,12 @@ github.com/kf5grd/keybasebot v1.3.1-0.20210115152456-e9098b6373e7 h1:uUjyh919Gup
|
|||||||
github.com/kf5grd/keybasebot v1.3.1-0.20210115152456-e9098b6373e7/go.mod h1:aLjlXVBN7JQuBkKfUK/VT6fgXY8Gt4TlnNZGd3iPQXg=
|
github.com/kf5grd/keybasebot v1.3.1-0.20210115152456-e9098b6373e7/go.mod h1:aLjlXVBN7JQuBkKfUK/VT6fgXY8Gt4TlnNZGd3iPQXg=
|
||||||
github.com/kf5grd/keybasebot v1.3.1-0.20210115153557-55a46e5206dc h1:vO5YkfgOxBLdpOLHewDBOcZdRolQLMJbh0aoQJIyiI4=
|
github.com/kf5grd/keybasebot v1.3.1-0.20210115153557-55a46e5206dc h1:vO5YkfgOxBLdpOLHewDBOcZdRolQLMJbh0aoQJIyiI4=
|
||||||
github.com/kf5grd/keybasebot v1.3.1-0.20210115153557-55a46e5206dc/go.mod h1:aLjlXVBN7JQuBkKfUK/VT6fgXY8Gt4TlnNZGd3iPQXg=
|
github.com/kf5grd/keybasebot v1.3.1-0.20210115153557-55a46e5206dc/go.mod h1:aLjlXVBN7JQuBkKfUK/VT6fgXY8Gt4TlnNZGd3iPQXg=
|
||||||
|
github.com/kf5grd/keybasebot v1.3.1-0.20210115215309-970123606dc4 h1:ONxFFsoV0AYMbpt5G1hCDh3ZWMGI82JLD80i4a2cwOQ=
|
||||||
|
github.com/kf5grd/keybasebot v1.3.1-0.20210115215309-970123606dc4/go.mod h1:8T07cWZZrl2G6hTRsL9x2SBwaH8gEZocF9NRknSU3dY=
|
||||||
|
github.com/kf5grd/keybasebot v1.3.1-0.20210115222331-9060677d0119 h1:t2INVIjxt/kq4AszGOYCl0LmHJnvU7f28UA+1ouimVA=
|
||||||
|
github.com/kf5grd/keybasebot v1.3.1-0.20210115222331-9060677d0119/go.mod h1:8T07cWZZrl2G6hTRsL9x2SBwaH8gEZocF9NRknSU3dY=
|
||||||
|
github.com/kf5grd/keybasebot v1.4.1 h1:6VTcDnCiYWtEtxSOEFvKF5R7VwabR3pSEONWV81WS+Q=
|
||||||
|
github.com/kf5grd/keybasebot v1.4.1/go.mod h1:8T07cWZZrl2G6hTRsL9x2SBwaH8gEZocF9NRknSU3dY=
|
||||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
@ -341,6 +351,8 @@ google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww
|
|||||||
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
||||||
google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc=
|
google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc=
|
||||||
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
||||||
|
google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
|
||||||
|
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
||||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||||
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||||
@ -411,3 +423,5 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
|||||||
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
||||||
samhofi.us/x/keybase/v2 v2.0.6 h1:gLluTcyjbwckQxSarF1ig2klL4Li7O/THdxsgo1dUvw=
|
samhofi.us/x/keybase/v2 v2.0.6 h1:gLluTcyjbwckQxSarF1ig2klL4Li7O/THdxsgo1dUvw=
|
||||||
samhofi.us/x/keybase/v2 v2.0.6/go.mod h1:lJivwhzMSV+WUg+XUbatszStjjFVcuLGl+xcQpqQ5GQ=
|
samhofi.us/x/keybase/v2 v2.0.6/go.mod h1:lJivwhzMSV+WUg+XUbatszStjjFVcuLGl+xcQpqQ5GQ=
|
||||||
|
samhofi.us/x/keybase/v2 v2.0.8 h1:hmGZa8v1peHuWBvePI09EXh5vahxbDPqNAXtztLDQzM=
|
||||||
|
samhofi.us/x/keybase/v2 v2.0.8/go.mod h1:lJivwhzMSV+WUg+XUbatszStjjFVcuLGl+xcQpqQ5GQ=
|
||||||
|
|||||||
54
main.go
54
main.go
@ -10,6 +10,7 @@ import (
|
|||||||
"app/cmd"
|
"app/cmd"
|
||||||
|
|
||||||
"github.com/kf5grd/keybasebot"
|
"github.com/kf5grd/keybasebot"
|
||||||
|
"github.com/kf5grd/keybasebot/pkg/kvstore"
|
||||||
"samhofi.us/x/keybase/v2"
|
"samhofi.us/x/keybase/v2"
|
||||||
"samhofi.us/x/keybase/v2/types/chat1"
|
"samhofi.us/x/keybase/v2/types/chat1"
|
||||||
)
|
)
|
||||||
@ -21,6 +22,15 @@ func main() {
|
|||||||
b.JSON = opts.JSON
|
b.JSON = opts.JSON
|
||||||
b.LogWriter = os.Stdout
|
b.LogWriter = os.Stdout
|
||||||
b.LogConv = chat1.ConvIDStr(opts.LogConvIDStr)
|
b.LogConv = chat1.ConvIDStr(opts.LogConvIDStr)
|
||||||
|
// set the bot owner for private commands
|
||||||
|
if opts.Owner != "" {
|
||||||
|
b.Meta["owner"] = opts.Owner
|
||||||
|
}
|
||||||
|
if opts.KvStoreTeam != "" {
|
||||||
|
b.Meta["kvstore"] = opts.KvStoreTeam
|
||||||
|
loadNsfwAllowed(b)
|
||||||
|
}
|
||||||
|
// set reddit login, which enables reddit commands
|
||||||
if opts.RedditUser != "" && opts.RedditPass != "" {
|
if opts.RedditUser != "" && opts.RedditPass != "" {
|
||||||
b.Meta["reddit-user"] = opts.RedditUser
|
b.Meta["reddit-user"] = opts.RedditUser
|
||||||
b.Meta["reddit-pass"] = opts.RedditPass
|
b.Meta["reddit-pass"] = opts.RedditPass
|
||||||
@ -64,6 +74,16 @@ func main() {
|
|||||||
keybasebot.CommandPrefix("!price"),
|
keybasebot.CommandPrefix("!price"),
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
keybasebot.BotCommand{
|
||||||
|
Name: "nsfw",
|
||||||
|
Ad: nil,
|
||||||
|
Run: keybasebot.Adapt(
|
||||||
|
setNsfw,
|
||||||
|
keybasebot.MessageType("text"),
|
||||||
|
keybasebot.CommandPrefix("!nsfw"),
|
||||||
|
requireOwner(),
|
||||||
|
),
|
||||||
|
},
|
||||||
)
|
)
|
||||||
// if there are reddit credentials add the reddit commands
|
// if there are reddit credentials add the reddit commands
|
||||||
if opts.RedditPass != "" && opts.RedditUser != "" {
|
if opts.RedditPass != "" && opts.RedditUser != "" {
|
||||||
@ -71,7 +91,21 @@ func main() {
|
|||||||
keybasebot.BotCommand{
|
keybasebot.BotCommand{
|
||||||
Name: "eyebleach",
|
Name: "eyebleach",
|
||||||
Ad: &cmd.EyebleachAd,
|
Ad: &cmd.EyebleachAd,
|
||||||
Run: keybasebot.Adapt(cmd.Eyebleach, keybasebot.MessageType("text"), keybasebot.CommandPrefix("!eyebleach")),
|
Run: keybasebot.Adapt(
|
||||||
|
cmd.Eyebleach,
|
||||||
|
keybasebot.MessageType("text"),
|
||||||
|
keybasebot.CommandPrefix("!eyebleach"),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
keybasebot.BotCommand{
|
||||||
|
Name: "boobs",
|
||||||
|
Ad: nil,
|
||||||
|
Run: keybasebot.Adapt(
|
||||||
|
cmd.Boobs,
|
||||||
|
keybasebot.MessageType("text"),
|
||||||
|
keybasebot.CommandPrefix("!boobs"),
|
||||||
|
nsfwFilter(),
|
||||||
|
),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
fmt.Printf("%+v\n", opts)
|
fmt.Printf("%+v\n", opts)
|
||||||
@ -91,3 +125,21 @@ func main() {
|
|||||||
// then run
|
// then run
|
||||||
b.Run()
|
b.Run()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func loadNsfwAllowed(b *keybasebot.Bot) {
|
||||||
|
// get the team from meta
|
||||||
|
data, ok := b.Meta["kvstore"]
|
||||||
|
if ok {
|
||||||
|
// make something to fill
|
||||||
|
allowedTeams := make(map[chat1.ConvIDStr]bool)
|
||||||
|
team := data.(string)
|
||||||
|
kvKey := kvstore.New("nsfwAllowed", &allowedTeams, -1)
|
||||||
|
err := kvstore.Get(b.KB, team, "ssh0le", &kvKey)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// set the allowed teams into meta
|
||||||
|
b.Meta["nsfwAllowed"] = allowedTeams
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
67
ownerCommands.go
Normal file
67
ownerCommands.go
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/kf5grd/keybasebot"
|
||||||
|
"github.com/kf5grd/keybasebot/pkg/kvstore"
|
||||||
|
"samhofi.us/x/keybase/v2/types/chat1"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setNsfw(m chat1.MsgSummary, b *keybasebot.Bot) (bool, error) {
|
||||||
|
b.KB.SendMessageByConvID(m.ConvID, "Pong!")
|
||||||
|
b.Logger.Info("owner command in convid %s", m.ConvID)
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func addNsfwTeam(b *keybasebot.Bot, c chat1.ConvIDStr) bool {
|
||||||
|
allowedTeams := make(map[chat1.ConvIDStr]bool)
|
||||||
|
// get the allowed teams
|
||||||
|
data, ok := b.Meta["nsfwAllowed"]
|
||||||
|
if !ok {
|
||||||
|
// the key doesn't exist yet so go ahead and create it
|
||||||
|
allowedTeams[c] = true
|
||||||
|
} else {
|
||||||
|
// the key exists and needs to be updated
|
||||||
|
allowedTeams := data.(map[chat1.ConvIDStr]bool)
|
||||||
|
allowedTeams[c] = true
|
||||||
|
}
|
||||||
|
// write the key to meta
|
||||||
|
b.Meta["nsfwAllowed"] = allowedTeams
|
||||||
|
// write the key to kvStore if enabled
|
||||||
|
data, ok = b.Meta["kvstore"]
|
||||||
|
if ok {
|
||||||
|
team := data.(string)
|
||||||
|
kvKey := kvstore.New("nsfwAllowed", allowedTeams, -1)
|
||||||
|
err := kvstore.Put(b.KB, team, "ssh0le", kvKey)
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func delNsfwTeam(b *keybasebot.Bot, c chat1.ConvIDStr) bool {
|
||||||
|
allowedTeams := make(map[chat1.ConvIDStr]bool)
|
||||||
|
// get the allowed teams
|
||||||
|
data, ok := b.Meta["nsfwAllowed"]
|
||||||
|
if !ok {
|
||||||
|
// the key doesn't exist yet so go return
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
// the key exists and needs to be updated
|
||||||
|
allowedTeams := data.(map[chat1.ConvIDStr]bool)
|
||||||
|
delete(allowedTeams, c)
|
||||||
|
}
|
||||||
|
// write the key to meta
|
||||||
|
b.Meta["nsfwAllowed"] = allowedTeams
|
||||||
|
// write the key to kvStore if enabled
|
||||||
|
data, ok = b.Meta["kvstore"]
|
||||||
|
if ok {
|
||||||
|
team := data.(string)
|
||||||
|
kvKey := kvstore.New("nsfwAllowed", allowedTeams, -1)
|
||||||
|
err := kvstore.Put(b.KB, team, "ssh0le", kvKey)
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user