Compare commits
	
		
			No commits in common. "09d4dc8d6435c324202507d4bc42e8e06338ea5c" and "13f599c3b138d2c94fb74c118561c56f65bab968" have entirely different histories.
		
	
	
		
			09d4dc8d64
			...
			13f599c3b1
		
	
		
					 3 changed files with 29 additions and 43 deletions
				
			
		| 
						 | 
					@ -8,6 +8,7 @@ RUN cd /go/src/git.martyn.berlin/martyn/twitchsingstools/; make deps ; make stat
 | 
				
			||||||
FROM scratch
 | 
					FROM scratch
 | 
				
			||||||
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
 | 
					COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
 | 
				
			||||||
COPY --from=builder /go/src/git.martyn.berlin/martyn/twitchsingstools /app/
 | 
					COPY --from=builder /go/src/git.martyn.berlin/martyn/twitchsingstools /app/
 | 
				
			||||||
 | 
					COPY strings.json /app/strings.json
 | 
				
			||||||
COPY web/ /app/web/
 | 
					COPY web/ /app/web/
 | 
				
			||||||
WORKDIR /app
 | 
					WORKDIR /app
 | 
				
			||||||
CMD ["/app/twitchsingstools"]
 | 
					CMD ["/app/twitchsingstools"]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,22 +40,13 @@ var DirectMsgRegex *regexp.Regexp = regexp.MustCompile(`^:(\w+)!\w+@\w+\.tmi\.tw
 | 
				
			||||||
// command.
 | 
					// command.
 | 
				
			||||||
var CmdRegex *regexp.Regexp = regexp.MustCompile(`^!(\w+)\s?(\w+)?`)
 | 
					var CmdRegex *regexp.Regexp = regexp.MustCompile(`^!(\w+)\s?(\w+)?`)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type IRCOAuthCred struct {
 | 
					type OAuthCred struct {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// The bot account's OAuth password.
 | 
						// The bot account's OAuth password.
 | 
				
			||||||
	Password string `json:"password,omitempty"`
 | 
						Password string `json:"password,omitempty"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// The developer application client ID. Used for API calls to Twitch.
 | 
						// The developer application client ID. Used for API calls to Twitch.
 | 
				
			||||||
	Nick string `json:"nick,omitempty"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type AppOAuthCred struct {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// The bot account's OAuth password.
 | 
					 | 
				
			||||||
	ClientID string `json:"client_id,omitempty"`
 | 
						ClientID string `json:"client_id,omitempty"`
 | 
				
			||||||
 | 
					 | 
				
			||||||
	// The developer application client ID. Used for API calls to Twitch.
 | 
					 | 
				
			||||||
	ClientSecret string `json:"client_secret,omitempty"`
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type ConfigStruct struct {
 | 
					type ConfigStruct struct {
 | 
				
			||||||
| 
						 | 
					@ -68,21 +59,21 @@ type ConfigStruct struct {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type KardBot struct {
 | 
					type KardBot struct {
 | 
				
			||||||
	Channel        string
 | 
						Channel     string
 | 
				
			||||||
	conn           net.Conn
 | 
						conn        net.Conn
 | 
				
			||||||
	IrcCredentials *IRCOAuthCred
 | 
						IrcCredentials *OAuthCred
 | 
				
			||||||
	AppCredentials *AppOAuthCred
 | 
						AppCredentials *OAuthCred
 | 
				
			||||||
	MsgRate        time.Duration
 | 
						MsgRate     time.Duration
 | 
				
			||||||
	Name           string
 | 
						Name        string
 | 
				
			||||||
	Port           string
 | 
						Port        string
 | 
				
			||||||
	IrcPrivatePath string
 | 
						IrcPrivatePath string
 | 
				
			||||||
	AppPrivatePath string
 | 
						AppPrivatePath string
 | 
				
			||||||
	Server         string
 | 
						Server      string
 | 
				
			||||||
	startTime      time.Time
 | 
						startTime   time.Time
 | 
				
			||||||
	Prompts        []string
 | 
						Prompts     []string
 | 
				
			||||||
	Database       scribble.Driver
 | 
						Database    scribble.Driver
 | 
				
			||||||
	ChannelData    map[string]ChannelData
 | 
						ChannelData map[string]ChannelData
 | 
				
			||||||
	Config         ConfigStruct
 | 
						Config      ConfigStruct
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type ChannelData struct {
 | 
					type ChannelData struct {
 | 
				
			||||||
| 
						 | 
					@ -92,7 +83,7 @@ type ChannelData struct {
 | 
				
			||||||
	ExtraStrings   string    `json:"extrastrings,omitempty"`
 | 
						ExtraStrings   string    `json:"extrastrings,omitempty"`
 | 
				
			||||||
	JoinTime       time.Time `json:"jointime"`
 | 
						JoinTime       time.Time `json:"jointime"`
 | 
				
			||||||
	ControlChannel bool
 | 
						ControlChannel bool
 | 
				
			||||||
	HasLeft        bool `json:"hasleft"`
 | 
						HasLeft        bool      `json:"hasleft"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Connects the bot to the Twitch IRC server. The bot will continue to try to connect until it
 | 
					// Connects the bot to the Twitch IRC server. The bot will continue to try to connect until it
 | 
				
			||||||
| 
						 | 
					@ -172,8 +163,8 @@ func (bb *KardBot) HandleChat() error {
 | 
				
			||||||
			matches = DirectMsgRegex.FindStringSubmatch(line)
 | 
								matches = DirectMsgRegex.FindStringSubmatch(line)
 | 
				
			||||||
			if nil != matches {
 | 
								if nil != matches {
 | 
				
			||||||
				userName := matches[1]
 | 
									userName := matches[1]
 | 
				
			||||||
				//				msgType := matches[2]
 | 
					//				msgType := matches[2]
 | 
				
			||||||
				//				channel := matches[3]
 | 
					//				channel := matches[3]
 | 
				
			||||||
				msg := matches[4]
 | 
									msg := matches[4]
 | 
				
			||||||
				rgb.GPrintf("[%s] Direct message %s: %s\n", TimeStamp(), userName, msg)
 | 
									rgb.GPrintf("[%s] Direct message %s: %s\n", TimeStamp(), userName, msg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -235,7 +226,7 @@ func (bb *KardBot) HandleChat() error {
 | 
				
			||||||
								)
 | 
													)
 | 
				
			||||||
								err := bb.Msg("Welcome to Karaokards, your admin panel is https://karaokards.ing.martyn.berlin/admin/"+userName+"/"+magicCode, userName)
 | 
													err := bb.Msg("Welcome to Karaokards, your admin panel is https://karaokards.ing.martyn.berlin/admin/"+userName+"/"+magicCode, userName)
 | 
				
			||||||
								if err != nil {
 | 
													if err != nil {
 | 
				
			||||||
									rgb.RPrintf("[%s] ERROR %s\n", err)
 | 
														rgb.RPrintf("[%s] ERROR %s\n",err)
 | 
				
			||||||
								}
 | 
													}
 | 
				
			||||||
								bb.Say("Ack.")
 | 
													bb.Say("Ack.")
 | 
				
			||||||
							default:
 | 
												default:
 | 
				
			||||||
| 
						 | 
					@ -285,7 +276,7 @@ func (bb *KardBot) JoinChannel(channels ...string) {
 | 
				
			||||||
func (bb *KardBot) ReadCredentials(credType string) error {
 | 
					func (bb *KardBot) ReadCredentials(credType string) error {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var err error
 | 
						var err error
 | 
				
			||||||
	var credFile []byte
 | 
					    var credFile []byte
 | 
				
			||||||
	// reads from the file
 | 
						// reads from the file
 | 
				
			||||||
	if credType == "IRC" {
 | 
						if credType == "IRC" {
 | 
				
			||||||
		credFile, err = ioutil.ReadFile(bb.IrcPrivatePath)
 | 
							credFile, err = ioutil.ReadFile(bb.IrcPrivatePath)
 | 
				
			||||||
| 
						 | 
					@ -297,21 +288,15 @@ func (bb *KardBot) ReadCredentials(credType string) error {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// parses the file contents
 | 
						// parses the file contents
 | 
				
			||||||
	if credType == "IRC" {
 | 
						var creds OAuthCred
 | 
				
			||||||
		var creds IRCOAuthCred
 | 
						dec := json.NewDecoder(strings.NewReader(string(credFile)))
 | 
				
			||||||
		dec := json.NewDecoder(strings.NewReader(string(credFile)))
 | 
						if err = dec.Decode(&creds); nil != err && io.EOF != err {
 | 
				
			||||||
		if err = dec.Decode(&creds); nil != err && io.EOF != err {
 | 
							return err
 | 
				
			||||||
			return err
 | 
						}
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if credType == "IRC" {
 | 
				
			||||||
		bb.IrcCredentials = &creds
 | 
							bb.IrcCredentials = &creds
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		var creds AppOAuthCred
 | 
					 | 
				
			||||||
		dec := json.NewDecoder(strings.NewReader(string(credFile)))
 | 
					 | 
				
			||||||
		if err = dec.Decode(&creds); nil != err && io.EOF != err {
 | 
					 | 
				
			||||||
			return err
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		bb.AppCredentials = &creds
 | 
							bb.AppCredentials = &creds
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -398,7 +383,7 @@ func (bb *KardBot) Start() {
 | 
				
			||||||
		bb.Connect()
 | 
							bb.Connect()
 | 
				
			||||||
		bb.Login()
 | 
							bb.Login()
 | 
				
			||||||
		if len(bb.ChannelData) > 0 {
 | 
							if len(bb.ChannelData) > 0 {
 | 
				
			||||||
			for channelName, channelData := range bb.ChannelData {
 | 
								for channelName,channelData := range bb.ChannelData {
 | 
				
			||||||
				if !channelData.HasLeft {
 | 
									if !channelData.HasLeft {
 | 
				
			||||||
					bb.JoinChannel(channelName)
 | 
										bb.JoinChannel(channelName)
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -212,7 +212,7 @@ func TwitchAdminHandler(response http.ResponseWriter, request *http.Request) {
 | 
				
			||||||
			"https://id.twitch.tv/oauth2/token",
 | 
								"https://id.twitch.tv/oauth2/token",
 | 
				
			||||||
			url.Values{
 | 
								url.Values{
 | 
				
			||||||
				"client_id":     {ircBot.AppCredentials.ClientID},
 | 
									"client_id":     {ircBot.AppCredentials.ClientID},
 | 
				
			||||||
				"client_secret": {ircBot.AppCredentials.ClientSecret},
 | 
									"client_secret": {ircBot.AppCredentials.Password},
 | 
				
			||||||
				"code":          {vars["code"]},
 | 
									"code":          {vars["code"]},
 | 
				
			||||||
				"grant_type":    {"authorization_code"},
 | 
									"grant_type":    {"authorization_code"},
 | 
				
			||||||
				"redirect_uri":  {"https://" + ircBot.Config.ExternalUrl + "/twitchadmin"}})
 | 
									"redirect_uri":  {"https://" + ircBot.Config.ExternalUrl + "/twitchadmin"}})
 | 
				
			||||||
| 
						 | 
					@ -306,7 +306,7 @@ func TwitchBackendHandler(response http.ResponseWriter, request *http.Request) {
 | 
				
			||||||
			"https://id.twitch.tv/oauth2/token",
 | 
								"https://id.twitch.tv/oauth2/token",
 | 
				
			||||||
			url.Values{
 | 
								url.Values{
 | 
				
			||||||
				"client_id":     {ircBot.AppCredentials.ClientID},
 | 
									"client_id":     {ircBot.AppCredentials.ClientID},
 | 
				
			||||||
				"client_secret": {ircBot.AppCredentials.ClientSecret},
 | 
									"client_secret": {ircBot.AppCredentials.Password},
 | 
				
			||||||
				"code":          {vars["code"]},
 | 
									"code":          {vars["code"]},
 | 
				
			||||||
				"grant_type":    {"authorization_code"},
 | 
									"grant_type":    {"authorization_code"},
 | 
				
			||||||
				"redirect_uri":  {"https://" + ircBot.Config.ExternalUrl + "/twitchadmin"}})
 | 
									"redirect_uri":  {"https://" + ircBot.Config.ExternalUrl + "/twitchadmin"}})
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue