view run.go @ 1:4fb2b1cac732

bug fix
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Wed, 27 May 2020 10:31:13 +0900
parents 02ea3a34fe2c
children a92a8de9d190
line wrap: on
line source

package logroulette

import (
	"fmt"
	"math/rand"
	"os"
	"strings"
	"time"

	"github.com/int128/slack"
)

var iconURL string = "https://upload.wikimedia.org/wikipedia/commons/a/a4/13-02-27-spielbank-wiesbaden-by-RalfR-093.jpg"
var botName string = "ログルーレット"
var webhook string = os.Getenv("MATTERMOST_WEBHOOK")

func Run(jsonp string) int {

	users, err := convertFromJSonToUserInfo(jsonp)
	if err != nil {
		fmt.Println(err)
		return 1
	}
	targetUser, newUsers, err := perform(users)
	if err != nil {
		fmt.Println(err)
		return 1
	}
	err = converUserInfoToJSON(newUsers, jsonp)
	if err != nil {
		fmt.Println(err)
		return 1
	}

	var strBuilder strings.Builder
	strBuilder.WriteString("今日の議事録担当は ")
	strBuilder.WriteString(targetUser)
	strBuilder.WriteString("さんです!! オナシャス!!")

	slack.Send(webhook, &slack.Message{
		Username: botName,
		Text:     strBuilder.String(),
		IconURL:  iconURL,
	})
	return 0
}

func perform(users []UserInfo) (string, []UserInfo, error) {
	var entryUsers []UserInfo
	for _, user := range users {
		if user.Done {
			continue
		}
		entryUsers = append(entryUsers, user)
	}

	if len(entryUsers) == 0 {
		entryUsers = users
		for _, user := range entryUsers {
			user.Done = false
		}
	}

	targetUser, newUsers := loulette(entryUsers)

	return targetUser.Id, newUsers, nil
}

func loulette(users []UserInfo) (UserInfo, []UserInfo) {
	rand.Seed(time.Now().UnixNano())
	index := rand.Intn(len(users))
	users[index].Done = true
	for _, user := range users {
		fmt.Println(user)
	}
	return users[index], users
}