diff --git a/bot.go b/bot.go index 7d2a082..ddb21f8 100644 --- a/bot.go +++ b/bot.go @@ -24,6 +24,8 @@ var ( ) func RunBot() { + LoggerInit() + events, err := c.StreamingUser(ctx) if err != nil { ErrorLogger.Println("Streaming") @@ -45,7 +47,7 @@ func RunBot() { // New follower if notif.Type == "follow" { - acct := notif.Status.Account.Acct + acct := notif.Account.Acct if !exist_in_database(acct) { // Add to db and post welcome message InfoLogger.Printf("%s followed", acct) @@ -68,94 +70,92 @@ func RunBot() { content := notif.Status.Content tooturl := notif.Status.URL - for i := range followers { - if acct == string(followers[i].Acct) { // Follow check - if notif.Status.Visibility == "public" { // Reblog toot - if notif.Status.InReplyToID == nil { // Not boost replies - // Duplicate protection - content_hash := sha512.New() - content_hash.Write([]byte(content)) - hash := fmt.Sprintf("%x", content_hash.Sum(nil)) + // Follow check + if check_following(followers, acct) { + if notif.Status.Visibility == "public" { // Reblog toot + if notif.Status.InReplyToID == nil { // Not boost replies + // Duplicate protection + content_hash := sha512.New() + content_hash.Write([]byte(content)) + hash := fmt.Sprintf("%x", content_hash.Sum(nil)) - if !check_msg_hash(hash) { - save_msg_hash(hash) - InfoLogger.Printf("Hash of %s added to database", tooturl) - } else { - WarnLogger.Printf("%s is a duplicate and not boosted", tooturl) - break - } - - // Add to db if needed - if !exist_in_database(acct) { - add_to_db(acct) - InfoLogger.Printf("%s added to database", acct) - } - - // Message order - if check_order(acct) < Conf.Order_limit { - if check_ticket(acct) > 0 { // Message limit - take_ticket(acct) - InfoLogger.Printf("Ticket of %s was taken", acct) - - count_order(acct) - InfoLogger.Printf("Order of %s was counted", acct) - - c.Reblog(ctx, notif.Status.ID) - InfoLogger.Printf("Toot %s of %s was rebloged", tooturl, acct) - } else { - WarnLogger.Printf("%s haven't tickets", acct) - } - } else { - WarnLogger.Printf("%s order limit", acct) - } + if !check_msg_hash(hash) { + save_msg_hash(hash) + InfoLogger.Printf("Hash of %s added to database", tooturl) } else { - WarnLogger.Printf("%s is reply and not boosted", tooturl) + WarnLogger.Printf("%s is a duplicate and not boosted", tooturl) } - } else if notif.Status.Visibility == "direct" { // Admin commands - for y := 0; y < len(Conf.Admins); y++ { - if acct == Conf.Admins[y] { - recmd := regexp.MustCompile(`<[^>]+>`) - command := recmd.ReplaceAllString(content, "") - args := strings.Split(command, " ") - if len(args) == 3 { - mID := mastodon.ID((args[2])) - - switch args[1] { - case "unboost": - c.Unreblog(ctx, mID) - WarnLogger.Printf("%s was unrebloged", mID) - case "delete": - c.DeleteStatus(ctx, mID) - WarnLogger.Printf("%s was deleted", mID) - } - } - } else { - continue - } - } - } else { - WarnLogger.Printf("%s is not public toot and not boosted", tooturl) - break - } - } - if i == len(followers)-1 { // Notify user - if got_notice(acct) == 0 { + // Add to db if needed if !exist_in_database(acct) { add_to_db(acct) InfoLogger.Printf("%s added to database", acct) } - message := fmt.Sprintf("@%s %s", acct, Conf.NotFollowedMessage) - _, err := postToot(message, "direct") - if err != nil { - ErrorLogger.Printf("Notify %s", acct) - } - InfoLogger.Printf("%s has been notified", acct) + // Message order + if check_order(acct) < Conf.Order_limit { + if check_ticket(acct) > 0 { // Message limit + take_ticket(acct) + InfoLogger.Printf("Ticket of %s was taken", acct) - mark_notice(acct) - InfoLogger.Printf("%s marked notification in database", acct) + count_order(acct) + InfoLogger.Printf("Order of %s was counted", acct) + + c.Reblog(ctx, notif.Status.ID) + InfoLogger.Printf("Toot %s of %s was rebloged", tooturl, acct) + } else { + WarnLogger.Printf("%s haven't tickets", acct) + } + } else { + WarnLogger.Printf("%s order limit", acct) + } + } else { + WarnLogger.Printf("%s is reply and not boosted", tooturl) } + } else if notif.Status.Visibility == "direct" { // Admin commands + for y := range Conf.Admins { + if acct == Conf.Admins[y] { + recmd := regexp.MustCompile(`<[^>]+>`) + command := recmd.ReplaceAllString(content, "") + args := strings.Split(command, " ") + + if len(args) == 3 { + mID := mastodon.ID((args[2])) + + switch args[1] { + case "unboost": + c.Unreblog(ctx, mID) + WarnLogger.Printf("%s was unrebloged", mID) + case "delete": + c.DeleteStatus(ctx, mID) + WarnLogger.Printf("%s was deleted", mID) + default: + WarnLogger.Printf("%s entered wrong command", acct) + } + } else { + WarnLogger.Printf("%s entered wrong command", acct) + } + } + } + } else { + WarnLogger.Printf("%s is not public toot and not boosted", tooturl) + } + } else { // Notify user + if got_notice(acct) == 0 { + if !exist_in_database(acct) { + add_to_db(acct) + InfoLogger.Printf("%s added to database", acct) + } + + message := fmt.Sprintf("@%s %s", acct, Conf.NotFollowedMessage) + _, err := postToot(message, "direct") + if err != nil { + ErrorLogger.Printf("Notify %s", acct) + } + InfoLogger.Printf("%s has been notified", acct) + + mark_notice(acct) + InfoLogger.Printf("%s marked notification in database", acct) } } } diff --git a/cleaning.go b/cleaning.go index 1c85169..604a8e4 100644 --- a/cleaning.go +++ b/cleaning.go @@ -15,6 +15,8 @@ var ( func DeleteNotices() { wg.Done() + LoggerInit() + for { statuses, err := c.GetAccountStatuses(ctx, my_account.ID, &mastodon.Pagination{Limit: 60}) if err != nil { diff --git a/main.go b/main.go index 53f8dbe..cea9d04 100644 --- a/main.go +++ b/main.go @@ -1,8 +1,6 @@ package main func main() { - LoggerInit() - wg.Add(1) go DeleteNotices() diff --git a/utils.go b/utils.go index 11cdf4e..7076586 100644 --- a/utils.go +++ b/utils.go @@ -11,3 +11,13 @@ func postToot(toot string, vis string) (*mastodon.Status, error) { status, err := c.PostStatus(ctx, &conToot) return status, err } + +// Check following +func check_following(followers []*mastodon.Account, acct string) bool { + for i := range followers { + if acct == string(followers[i].Acct) { + return true + } + } + return false +}