mirror of
https://gitea.phreedom.club/localhost_frssoft/mastodon-group-bot.git
synced 2024-12-22 17:23:34 +02:00
init
This commit is contained in:
commit
cd868e44b1
4 changed files with 142 additions and 0 deletions
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
go.mod
|
||||
go.sum
|
||||
mastodon-group-bot
|
35
README.md
Normal file
35
README.md
Normal file
|
@ -0,0 +1,35 @@
|
|||
# Mastodon group bot
|
||||
|
||||
This is a bot which implements group functionality in Mastodon.
|
||||
|
||||
# Configuration
|
||||
|
||||
The bot is configured in a JSON file that looks like this:
|
||||
|
||||
```
|
||||
{
|
||||
"Server": "https://example.com",
|
||||
"ClientID": "0000000000000000000000000000000000000000000",
|
||||
"ClientSecret": "0000000000000000000000000000000000000000000",
|
||||
"AccessToken": "0000000000000000000000000000000000000000000",
|
||||
"WelcomeMessage": "We have a new member in our group. Please love and favor"
|
||||
}
|
||||
```
|
||||
|
||||
# Building
|
||||
|
||||
```
|
||||
go mod init mastodon-group-bot
|
||||
|
||||
go mod tidy
|
||||
|
||||
go build
|
||||
```
|
||||
|
||||
# Usage
|
||||
|
||||
```
|
||||
Usage of mastodon-group-bot:
|
||||
-config string
|
||||
Path to config (default "config.json")
|
||||
```
|
7
config.json
Normal file
7
config.json
Normal file
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"Server": "https://example.com",
|
||||
"ClientID": "0000000000000000000000000000000000000000000",
|
||||
"ClientSecret": "0000000000000000000000000000000000000000000",
|
||||
"AccessToken": "0000000000000000000000000000000000000000000",
|
||||
"WelcomeMessage": "We have a new member in our group. Please love and favor"
|
||||
}
|
97
main.go
Normal file
97
main.go
Normal file
|
@ -0,0 +1,97 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
|
||||
"github.com/mattn/go-mastodon"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Parse args
|
||||
ConfPath := flag.String("config", "config.json", "Path to config")
|
||||
flag.Parse()
|
||||
|
||||
// Reading config
|
||||
type Config struct {
|
||||
Server string `json:"Server"`
|
||||
ClientID string `json:"ClientID"`
|
||||
ClientSecret string `json:"ClientSecret"`
|
||||
AccessToken string `json:"AccessToken"`
|
||||
WelcomeMessage string `json:"WelcomeMessage"`
|
||||
}
|
||||
|
||||
data, err := os.ReadFile(*ConfPath)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
var Conf Config
|
||||
json.Unmarshal(data, &Conf)
|
||||
|
||||
c := mastodon.NewClient(&mastodon.Config{
|
||||
Server: Conf.Server,
|
||||
ClientID: Conf.ClientID,
|
||||
ClientSecret: Conf.ClientSecret,
|
||||
AccessToken: Conf.AccessToken,
|
||||
})
|
||||
|
||||
ctx := context.Background()
|
||||
events, err := c.StreamingUser(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
my_account, _ := c.GetAccountCurrentUser(ctx)
|
||||
followers, _ := c.GetAccountFollowers(ctx, my_account.ID, &mastodon.Pagination{Limit: 60})
|
||||
signed := false
|
||||
|
||||
// Run bot
|
||||
for {
|
||||
notifEvent, ok := (<-events).(*mastodon.NotificationEvent)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
|
||||
notif := notifEvent.Notification
|
||||
|
||||
// Posting function
|
||||
postToot := func(toot string, vis string) error {
|
||||
conToot := mastodon.Toot{
|
||||
Status: toot,
|
||||
Visibility: vis,
|
||||
}
|
||||
_, err := c.PostStatus(ctx, &conToot)
|
||||
return err
|
||||
}
|
||||
|
||||
// New subscriber
|
||||
if notif.Type == "follow" {
|
||||
var message = fmt.Sprintf("%s @%s", Conf.WelcomeMessage, notif.Account.Acct)
|
||||
postToot(message, "public")
|
||||
}
|
||||
|
||||
// Reblog toot
|
||||
if notif.Type == "mention" {
|
||||
sender := notif.Status.Account.Acct
|
||||
|
||||
// Subscription check
|
||||
for i := 0; i < len(followers); i++ {
|
||||
if sender == string(followers[i].Acct) {
|
||||
signed = true
|
||||
}
|
||||
}
|
||||
|
||||
if signed {
|
||||
c.Reblog(ctx, notif.Status.ID)
|
||||
} else {
|
||||
var message = fmt.Sprintf("@%s%s", notif.Account.Acct, ", you are not subscribed!")
|
||||
postToot(message, "direct")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue