forked from chteufleur/go-xmpp4steam
Minimum fonction like exchange message/presence
This commit is contained in:
parent
5d7183d05c
commit
8148a003cb
|
|
@ -0,0 +1,195 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"go-xmpp4steam/steam"
|
||||
"go-xmpp4steam/xmpp"
|
||||
|
||||
"github.com/jimlawless/cfg"
|
||||
"github.com/Philipp15b/go-steam/internal/steamlang"
|
||||
|
||||
"bufio"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
configurationFilePath = "xmpp4steam.cfg"
|
||||
)
|
||||
|
||||
var (
|
||||
mymap = make(map[string]string)
|
||||
)
|
||||
|
||||
func init() {
|
||||
err := cfg.Load(configurationFilePath, mymap)
|
||||
if err != nil {
|
||||
log.Fatal("Failed to load configuration file located at %s", configurationFilePath, err)
|
||||
}
|
||||
|
||||
// XMPP config
|
||||
xmpp.Addr = mymap["xmpp_server_address"]+":"+mymap["xmpp_server_port"]
|
||||
xmpp.JidStr = mymap["xmpp_hostname"]
|
||||
xmpp.Secret = mymap["xmpp_secret"]
|
||||
xmpp.PreferedJID = mymap["xmpp_authorized_jid"]
|
||||
|
||||
// Steam config
|
||||
steam.Username = mymap["steam_login"]
|
||||
steam.Password = mymap["steam_password"]
|
||||
steam.AuthCode = mymap["steam_auth_code"]
|
||||
}
|
||||
|
||||
func main() {
|
||||
go gatewayXmppSteamAction()
|
||||
go gatewaySteamXmppAction()
|
||||
|
||||
go gatewayXmppSteamPresence()
|
||||
go gatewayXmppSteamMessage()
|
||||
|
||||
go gatewaySteamXmppMessage()
|
||||
go gatewaySteamXmppPresence()
|
||||
|
||||
go steam.Run()
|
||||
go xmpp.Run()
|
||||
|
||||
inputStop()
|
||||
|
||||
steam.Disconnect()
|
||||
xmpp.Disconnect()
|
||||
time.Sleep(1 * time.Second)
|
||||
}
|
||||
|
||||
|
||||
// XMPP -> Steam gateways
|
||||
func gatewayXmppSteamAction() {
|
||||
for {
|
||||
action := <- xmpp.ChanAction
|
||||
|
||||
switch action {
|
||||
case xmpp.ActionConnexion:
|
||||
if !steam.IsConnected() {
|
||||
steam.Connect()
|
||||
}
|
||||
|
||||
case xmpp.ActionDeconnexion:
|
||||
if steam.IsConnected() {
|
||||
steam.Disconnect()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func gatewayXmppSteamPresence() {
|
||||
for {
|
||||
status := <- xmpp.ChanPresence
|
||||
var steamStatus steamlang.EPersonaState
|
||||
|
||||
switch status {
|
||||
case xmpp.Status_online:
|
||||
steamStatus = steam.State_Online
|
||||
|
||||
case xmpp.Status_away:
|
||||
steamStatus = steam.State_Away
|
||||
|
||||
case xmpp.Status_chat:
|
||||
|
||||
case xmpp.Status_extended_away:
|
||||
steamStatus = steam.State_Snooze
|
||||
|
||||
case xmpp.Status_do_not_disturb:
|
||||
steamStatus = steam.State_Busy
|
||||
}
|
||||
|
||||
steam.SendPresence(steamStatus)
|
||||
}
|
||||
}
|
||||
|
||||
func gatewayXmppSteamMessage() {
|
||||
for {
|
||||
steamId := <- xmpp.ChanMessage
|
||||
message := <- xmpp.ChanMessage
|
||||
|
||||
steam.SendMessage(steamId, message)
|
||||
}
|
||||
}
|
||||
// /XMPP -> Steam gateways
|
||||
|
||||
|
||||
|
||||
// Steam -> XMPP gateways
|
||||
func gatewaySteamXmppAction() {
|
||||
for {
|
||||
action := <- steam.ChanAction
|
||||
switch action {
|
||||
case steam.ActionConnected:
|
||||
xmpp.SendPresence(xmpp.CurrentStatus, xmpp.Type_available)
|
||||
|
||||
case steam.ActionDisconnected:
|
||||
xmpp.Disconnect()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func gatewaySteamXmppMessage() {
|
||||
for {
|
||||
steamId := <- steam.ChanMessage
|
||||
message := <- steam.ChanMessage
|
||||
xmpp.SendMessage(steamId+"@"+xmpp.JidStr, message)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func gatewaySteamXmppPresence() {
|
||||
for {
|
||||
// name := steam.ChanPresence
|
||||
steamId := <- steam.ChanPresence
|
||||
stat := <- steam.ChanPresenceSteam
|
||||
|
||||
var status string
|
||||
var tpye string
|
||||
switch stat {
|
||||
case steam.State_Offline:
|
||||
status = xmpp.Status_offline
|
||||
tpye = xmpp.Type_unavailable
|
||||
|
||||
case steam.State_Online:
|
||||
status = xmpp.Status_online
|
||||
tpye = xmpp.Type_available
|
||||
|
||||
case steam.State_Busy:
|
||||
status = xmpp.Status_do_not_disturb
|
||||
tpye = xmpp.Type_available
|
||||
|
||||
case steam.State_Away:
|
||||
status = xmpp.Status_away
|
||||
tpye = xmpp.Type_available
|
||||
|
||||
case steam.State_Snooze:
|
||||
status = xmpp.Status_extended_away
|
||||
tpye = xmpp.Type_available
|
||||
}
|
||||
|
||||
xmpp.SendPresenceFrom(status, tpye, steamId+"@"+xmpp.JidStr)
|
||||
}
|
||||
}
|
||||
// /Steam -> XMPP gateways
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
func inputStop() {
|
||||
for {
|
||||
in := bufio.NewReader(os.Stdin)
|
||||
line, err := in.ReadString('\n')
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
line = strings.TrimRight(line, "\n")
|
||||
|
||||
if line == "stop" {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"Addresses":[{"IP":"185.25.180.14","Port":27019},{"IP":"185.25.180.15","Port":27020},{"IP":"155.133.242.8","Port":27019},{"IP":"185.25.180.14","Port":27018},{"IP":"185.25.180.15","Port":27018},{"IP":"185.25.180.14","Port":27020},{"IP":"155.133.242.8","Port":27018},{"IP":"155.133.242.8","Port":27020},{"IP":"162.254.197.40","Port":27017},{"IP":"185.25.180.15","Port":27019},{"IP":"155.133.242.8","Port":27017},{"IP":"155.133.242.9","Port":27018},{"IP":"155.133.242.9","Port":27020},{"IP":"155.133.242.9","Port":27019},{"IP":"162.254.197.42","Port":27019},{"IP":"162.254.197.40","Port":27019},{"IP":"185.25.180.15","Port":27017},{"IP":"162.254.197.40","Port":27021},{"IP":"155.133.242.9","Port":27017},{"IP":"185.25.180.14","Port":27017},{"IP":"162.254.197.42","Port":27017},{"IP":"162.254.197.42","Port":27020},{"IP":"162.254.197.41","Port":27017},{"IP":"162.254.197.40","Port":27020},{"IP":"162.254.196.42","Port":27020},{"IP":"162.254.197.40","Port":27018},{"IP":"162.254.197.42","Port":27018},{"IP":"162.254.197.42","Port":27021},{"IP":"162.254.197.41","Port":27019},{"IP":"162.254.196.42","Port":27021},{"IP":"162.254.196.41","Port":27021},{"IP":"162.254.196.42","Port":27019},{"IP":"162.254.197.41","Port":27018},{"IP":"162.254.196.42","Port":27018},{"IP":"162.254.197.41","Port":27021},{"IP":"162.254.196.41","Port":27019},{"IP":"162.254.196.43","Port":27020},{"IP":"162.254.197.41","Port":27020},{"IP":"162.254.196.43","Port":27018},{"IP":"162.254.196.43","Port":27021},{"IP":"162.254.196.40","Port":27019},{"IP":"162.254.196.41","Port":27018},{"IP":"146.66.152.10","Port":27019},{"IP":"162.254.196.42","Port":27017},{"IP":"162.254.196.43","Port":27017},{"IP":"162.254.196.40","Port":27021},{"IP":"162.254.196.41","Port":27020},{"IP":"162.254.196.40","Port":27020},{"IP":"146.66.152.11","Port":27019},{"IP":"162.254.196.40","Port":27017},{"IP":"162.254.196.40","Port":27018},{"IP":"146.66.152.10","Port":27018},{"IP":"146.66.152.11","Port":27020},{"IP":"162.254.196.41","Port":27017},{"IP":"162.254.196.43","Port":27019},{"IP":"146.66.152.11","Port":27017},{"IP":"146.66.152.10","Port":27020},{"IP":"146.66.152.10","Port":27017},{"IP":"146.66.152.11","Port":27018},{"IP":"146.66.155.8","Port":27018},{"IP":"146.66.155.8","Port":27019},{"IP":"185.25.182.10","Port":27020},{"IP":"185.25.182.10","Port":27018},{"IP":"146.66.155.8","Port":27020},{"IP":"185.25.182.10","Port":27019},{"IP":"146.66.155.8","Port":27017},{"IP":"185.25.182.10","Port":27017},{"IP":"208.78.164.13","Port":27019},{"IP":"208.78.164.11","Port":27017},{"IP":"208.78.164.13","Port":27018},{"IP":"208.78.164.14","Port":27018},{"IP":"208.78.164.12","Port":27019},{"IP":"208.78.164.12","Port":27018},{"IP":"208.78.164.11","Port":27018},{"IP":"208.78.164.13","Port":27017},{"IP":"208.78.164.11","Port":27019},{"IP":"208.78.164.10","Port":27017},{"IP":"208.78.164.12","Port":27017},{"IP":"208.78.164.10","Port":27019},{"IP":"208.78.164.9","Port":27019}]}
|
||||
|
|
@ -0,0 +1,218 @@
|
|||
package steam
|
||||
|
||||
import (
|
||||
"github.com/Philipp15b/go-steam"
|
||||
"github.com/Philipp15b/go-steam/internal/steamlang"
|
||||
"github.com/Philipp15b/go-steam/steamid"
|
||||
|
||||
"encoding/json"
|
||||
"io/ioutil"
|
||||
"strconv"
|
||||
"time"
|
||||
"log"
|
||||
)
|
||||
|
||||
const (
|
||||
sentryFile = "sentry"
|
||||
serverAddrs = "servers.addr"
|
||||
|
||||
State_Offline = steamlang.EPersonaState_Offline
|
||||
State_Online = steamlang.EPersonaState_Online
|
||||
State_Busy = steamlang.EPersonaState_Busy
|
||||
State_Away = steamlang.EPersonaState_Away
|
||||
State_Snooze = steamlang.EPersonaState_Snooze
|
||||
State_LookingToTrade = steamlang.EPersonaState_LookingToTrade
|
||||
State_LookingToPlay = steamlang.EPersonaState_LookingToPlay
|
||||
State_Max = steamlang.EPersonaState_Max
|
||||
|
||||
ActionConnected = "steam_connected"
|
||||
ActionDisconnected = "steam_disconnected"
|
||||
|
||||
LogInfo = "\t[STEAM INFO]\t"
|
||||
LogError = "\t[STEAM ERROR]\t"
|
||||
LogDebug = "\t[STEAM DEBUG]\t"
|
||||
)
|
||||
|
||||
var (
|
||||
Username = ""
|
||||
Password = ""
|
||||
AuthCode = ""
|
||||
|
||||
myLoginInfo = new(steam.LogOnDetails)
|
||||
client = steam.NewClient()
|
||||
|
||||
ChanPresence = make(chan string)
|
||||
ChanPresenceSteam = make(chan steamlang.EPersonaState)
|
||||
ChanMessage = make(chan string)
|
||||
ChanAction = make(chan string)
|
||||
)
|
||||
|
||||
func init() {
|
||||
var sentryHash steam.SentryHash
|
||||
sentryHash, err := ioutil.ReadFile(sentryFile)
|
||||
|
||||
myLoginInfo.Username = Username
|
||||
myLoginInfo.Password = Password
|
||||
|
||||
// TODO think again
|
||||
if err == nil {
|
||||
myLoginInfo.SentryFileHash = sentryHash
|
||||
log.Printf("%sAuthentification by SentryFileHash", LogDebug)
|
||||
} else if AuthCode != "" {
|
||||
myLoginInfo.AuthCode = AuthCode
|
||||
log.Printf("%sAuthentification by AuthCode", LogDebug)
|
||||
} else {
|
||||
log.Printf("%sFirst authentification", LogDebug)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func Run() {
|
||||
log.Printf("%sRunning", LogInfo)
|
||||
client = steam.NewClient()
|
||||
client.ConnectionTimeout = 10 * time.Second
|
||||
|
||||
mainSteam()
|
||||
}
|
||||
|
||||
func mainSteam() {
|
||||
for event := range client.Events() {
|
||||
switch e := event.(type) {
|
||||
case *steam.ConnectedEvent:
|
||||
client.Auth.LogOn(myLoginInfo)
|
||||
|
||||
case *steam.MachineAuthUpdateEvent:
|
||||
ioutil.WriteFile(sentryFile, e.Hash, 0666)
|
||||
|
||||
case *steam.LoggedOnEvent:
|
||||
SendPresence(steamlang.EPersonaState_Online)
|
||||
ChanAction <- ActionConnected
|
||||
|
||||
case steam.FatalErrorEvent:
|
||||
log.Printf("%sFatalError: ", LogError, e)
|
||||
ChanAction <- ActionDisconnected
|
||||
// Re run Steam
|
||||
go func() {
|
||||
time.Sleep(2 * time.Second)
|
||||
Run()
|
||||
}()
|
||||
return
|
||||
|
||||
case error:
|
||||
log.Printf("%s", LogError, e)
|
||||
|
||||
case *steam.ClientCMListEvent:
|
||||
// Save servers addresses
|
||||
b, err := json.Marshal(*e)
|
||||
if err != nil {
|
||||
log.Printf("%sFailed to json.Marshal() servers list", LogError)
|
||||
}
|
||||
ioutil.WriteFile(serverAddrs, b, 0666)
|
||||
|
||||
case *steam.PersonaStateEvent:
|
||||
// ChanPresence <- e.Name
|
||||
ChanPresence <- e.FriendId.ToString()
|
||||
ChanPresenceSteam <- e.State
|
||||
|
||||
case *steam.ChatMsgEvent:
|
||||
ChanMessage <- e.ChatterId.ToString()
|
||||
ChanMessage <- e.Message
|
||||
|
||||
default:
|
||||
log.Printf("%s", LogDebug, e)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func IsConnected() bool {
|
||||
return client.Connected()
|
||||
}
|
||||
|
||||
func Connect() {
|
||||
b, err := ioutil.ReadFile(serverAddrs)
|
||||
if err == nil {
|
||||
var toList steam.ClientCMListEvent
|
||||
err := json.Unmarshal(b, &toList)
|
||||
if err != nil {
|
||||
log.Printf("%sFailed to json.Unmarshal() servers list", LogError)
|
||||
} else {
|
||||
log.Printf("%sConnecting...", LogInfo)
|
||||
client.ConnectTo(toList.Addresses[0])
|
||||
}
|
||||
} else {
|
||||
log.Printf("%sFailed to read servers list file", LogError)
|
||||
client.Connect()
|
||||
}
|
||||
}
|
||||
|
||||
func Disconnect() {
|
||||
log.Printf("%sSteam disconnect", LogInfo)
|
||||
// TODO XMPP notification ofline from all steam friend
|
||||
|
||||
go client.Disconnect()
|
||||
}
|
||||
|
||||
|
||||
func SendMessage(steamId, message string) {
|
||||
steamIdUint64, err := strconv.ParseUint(steamId, 10, 64)
|
||||
if err == nil {
|
||||
client.Social.SendMessage(steamid.SteamId(steamIdUint64), steamlang.EChatEntryType_ChatMsg, message)
|
||||
} else {
|
||||
log.Printf("%sFailed to get SteamId from %s", LogError, steamId)
|
||||
}
|
||||
}
|
||||
|
||||
func SendPresence(status steamlang.EPersonaState) {
|
||||
client.Social.SetPersonaState(status)
|
||||
}
|
||||
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// First authentification error
|
||||
//------------------------------------------------------------------------------
|
||||
// 2015/10/17 15:15:29 Steam connected
|
||||
// SteamID: STEAM_0:0:0
|
||||
// 2015/10/17 15:15:30 Steam connected
|
||||
// FatalErrorEvent
|
||||
// Login error: EResult_AccountLogonDenied
|
||||
// &{}
|
||||
//------------------------------------------------------------------------------
|
||||
// Authentificated
|
||||
//------------------------------------------------------------------------------
|
||||
// &{1593367805 SsEgwfLu7Spol4jEzA0}
|
||||
// &{}
|
||||
// &{EClientPersonaStateFlag_GameDataBlob | EClientPersonaStateFlag_GameExtraInfo | EClientPersonaStateFlag_LastSeen | EClientPersonaStateFlag_PlayerName | EClientPersonaStateFlag_Presence | EClientPersonaStateFlag_QueryPort | EClientPersonaStateFlag_SourceID | EClientPersonaStateFlag_Status STEAM_0:0:6208314 EPersonaState_Online 0 0 0 0 0 65535 STEAM_0:0:0 [] Chteufleur eb267fc00a974dbd2ae7e3c3de06130729cdfcbd 1445087561 1445088090 0 1 1 false 0}
|
||||
// &{EClientPersonaStateFlag_GameDataBlob | EClientPersonaStateFlag_GameExtraInfo | EClientPersonaStateFlag_LastSeen | EClientPersonaStateFlag_PlayerName | EClientPersonaStateFlag_Presence | EClientPersonaStateFlag_QueryPort | EClientPersonaStateFlag_SourceID | EClientPersonaStateFlag_Status STEAM_0:1:23476646 EPersonaState_Online 0 274190 274190 Broforce 0 0 0 STEAM_0:0:0 [] moumoutte 1cebd6410e6ceb02af60d42a34ca355c5b3b41e6 1445034635 1445034642 0 1 1 false 0}
|
||||
// &{EClientPersonaStateFlag_GameDataBlob | EClientPersonaStateFlag_GameExtraInfo | EClientPersonaStateFlag_LastSeen | EClientPersonaStateFlag_PlayerName | EClientPersonaStateFlag_Presence | EClientPersonaStateFlag_QueryPort | EClientPersonaStateFlag_SourceID | EClientPersonaStateFlag_Status STEAM_0:1:22486691 EPersonaState_Online 0 0 0 0 0 65535 STEAM_0:0:0 [] Pimouss 9ed44c8628c419cb9cb184014889063de4146e38 1445078411 1445086045 0 1 1 false 0}
|
||||
// &{EClientPersonaStateFlag_GameDataBlob | EClientPersonaStateFlag_GameExtraInfo | EClientPersonaStateFlag_LastSeen | EClientPersonaStateFlag_PlayerName | EClientPersonaStateFlag_Presence | EClientPersonaStateFlag_QueryPort | EClientPersonaStateFlag_SourceID | EClientPersonaStateFlag_Status STEAM_0:1:20592317 EPersonaState_Online 0 0 0 0 0 65535 STEAM_0:0:0 [] Francis LALAN 9fe3eb4c1b2abf6768df2d41c6343dc69ec27e83 1445042279 1445072749 0 1 1 false 0}
|
||||
// &{103582791434277245 0 EAccountFlags_PersonaNameSet | EAccountFlags_Unbannable Steam Trading Cards Group 2ce81e0b8f1c748f86d1ca4230a7f45dd0b906b1 1448289 367203 23 124404 [] []}
|
||||
// &{EClientPersonaStateFlag_PlayerName | EClientPersonaStateFlag_Presence | EClientPersonaStateFlag_SourceID STEAM_0:0:6208314 EPersonaState_Offline 0 0 0 0 0 0 STEAM_0:0:0 [] Chteufleur eb267fc00a974dbd2ae7e3c3de06130729cdfcbd 0 0 0 0 0 false 0}
|
||||
// &{EClientPersonaStateFlag_PlayerName | EClientPersonaStateFlag_Presence | EClientPersonaStateFlag_SourceID STEAM_0:0:6208314 EPersonaState_Offline 0 0 0 0 0 0 STEAM_0:0:0 [] Chteufleur eb267fc00a974dbd2ae7e3c3de06130729cdfcbd 0 0 0 0 0 false 0}
|
||||
// &{EClientPersonaStateFlag_GameExtraInfo | EClientPersonaStateFlag_PlayerName | EClientPersonaStateFlag_Presence | EClientPersonaStateFlag_SourceID STEAM_0:0:52837827 EPersonaState_Offline 0 0 0 0 0 0 STEAM_0:0:0 [] beutard 0000000000000000000000000000000000000000 0 0 0 0 0 false 0}
|
||||
// &{EClientPersonaStateFlag_GameExtraInfo | EClientPersonaStateFlag_PlayerName | EClientPersonaStateFlag_Presence | EClientPersonaStateFlag_SourceID 103582791434277245 EPersonaState_Offline 0 0 0 0 0 0 STEAM_0:0:0 [] Steam Trading Cards Group 2ce81e0b8f1c748f86d1ca4230a7f45dd0b906b1 0 0 0 0 0 false 0}
|
||||
// &{EClientPersonaStateFlag_GameExtraInfo | EClientPersonaStateFlag_PlayerName | EClientPersonaStateFlag_Presence | EClientPersonaStateFlag_SourceID STEAM_0:1:20592317 EPersonaState_Offline 0 0 0 0 0 0 STEAM_0:0:0 [] Francis LALAN 9fe3eb4c1b2abf6768df2d41c6343dc69ec27e83 0 0 0 0 0 false 0}
|
||||
// &{EClientPersonaStateFlag_GameExtraInfo | EClientPersonaStateFlag_PlayerName | EClientPersonaStateFlag_Presence | EClientPersonaStateFlag_SourceID STEAM_0:1:23476646 EPersonaState_Offline 0 0 0 0 0 0 STEAM_0:0:0 [] moumoutte 1cebd6410e6ceb02af60d42a34ca355c5b3b41e6 0 0 0 0 0 false 0}
|
||||
// &{EClientPersonaStateFlag_GameExtraInfo | EClientPersonaStateFlag_PlayerName | EClientPersonaStateFlag_Presence | EClientPersonaStateFlag_SourceID STEAM_0:1:94714518 EPersonaState_Offline 0 0 0 0 0 0 STEAM_0:0:0 [] mimiptitsourie fa0f46837771ec60665889c285f9496d353a50e6 0 0 0 0 0 false 0}
|
||||
// &{EClientPersonaStateFlag_GameExtraInfo | EClientPersonaStateFlag_PlayerName | EClientPersonaStateFlag_Presence | EClientPersonaStateFlag_SourceID STEAM_0:0:18218832 EPersonaState_Offline 0 0 0 0 0 0 STEAM_0:0:0 [] Milamber 3cfcc21ea34862a3ee9634d36c91391cf73b4af9 0 0 0 0 0 false 0}
|
||||
// &{EClientPersonaStateFlag_GameExtraInfo | EClientPersonaStateFlag_PlayerName | EClientPersonaStateFlag_Presence | EClientPersonaStateFlag_SourceID STEAM_0:0:61725424 EPersonaState_Offline 0 0 0 0 0 0 STEAM_0:0:0 [] azer9911 c160d49f7a842f408051bbada040b7d154bbcaf5 0 0 0 0 0 false 0}
|
||||
// &{EClientPersonaStateFlag_GameExtraInfo | EClientPersonaStateFlag_PlayerName | EClientPersonaStateFlag_Presence | EClientPersonaStateFlag_SourceID STEAM_0:1:17516002 EPersonaState_Offline 0 0 0 0 0 0 STEAM_0:0:0 [] Earenfly 52d70ad89eab9bf4f64f25509ac80a8081b0c0d6 0 0 0 0 0 false 0}
|
||||
// &{EClientPersonaStateFlag_GameExtraInfo | EClientPersonaStateFlag_PlayerName | EClientPersonaStateFlag_Presence | EClientPersonaStateFlag_SourceID STEAM_0:1:20054215 EPersonaState_Offline 0 0 0 0 0 0 STEAM_0:0:0 [] Wurrzounet 257038af8628ded724c8c8af072c678aadf3c72c 0 0 0 0 0 false 0}
|
||||
// &{EClientPersonaStateFlag_GameExtraInfo | EClientPersonaStateFlag_PlayerName | EClientPersonaStateFlag_Presence | EClientPersonaStateFlag_SourceID STEAM_0:0:45567500 EPersonaState_Offline 0 0 0 0 0 0 STEAM_0:0:0 [] johann.gautier.fr bcc9b911486843390af223b8e7cb6d931e9b7e75 0 0 0 0 0 false 0}
|
||||
// &{EClientPersonaStateFlag_GameExtraInfo | EClientPersonaStateFlag_PlayerName | EClientPersonaStateFlag_Presence | EClientPersonaStateFlag_SourceID STEAM_0:1:22486691 EPersonaState_Offline 0 0 0 0 0 0 STEAM_0:0:0 [] Pimouss 9ed44c8628c419cb9cb184014889063de4146e38 0 0 0 0 0 false 0}
|
||||
// &{EClientPersonaStateFlag_GameExtraInfo | EClientPersonaStateFlag_PlayerName | EClientPersonaStateFlag_Presence | EClientPersonaStateFlag_SourceID STEAM_0:1:45984569 EPersonaState_Offline 0 0 0 0 0 0 STEAM_0:0:0 [] Sl@ny aa4bf32f5fc568c7949bf88c3c569c452edfcdf6 0 0 0 0 0 false 0}
|
||||
// &{EClientPersonaStateFlag_GameExtraInfo | EClientPersonaStateFlag_PlayerName | EClientPersonaStateFlag_Presence | EClientPersonaStateFlag_SourceID STEAM_0:1:19128186 EPersonaState_Offline 0 0 0 0 0 0 STEAM_0:0:0 [] pouzetalexis 0000000000000000000000000000000000000000 0 0 0 0 0 false 0}
|
||||
// &{Chteufleur SE [] [] 38 false EAccountFlags_EmailValidated | EAccountFlags_HWIDSet | EAccountFlags_LogonExtraSecurity | EAccountFlags_PasswordSet | EAccountFlags_PersonaNameSet | EAccountFlags_Steam2MigrationComplete 0 }
|
||||
// &{EClientPersonaStateFlag_PlayerName | EClientPersonaStateFlag_Presence | EClientPersonaStateFlag_SourceID STEAM_0:0:6208314 EPersonaState_Offline 0 0 0 0 0 0 STEAM_0:0:0 [] Chteufleur eb267fc00a974dbd2ae7e3c3de06130729cdfcbd 0 0 0 0 0 false 0}
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
// &{STEAM_0:0:0 STEAM_0:1:22486691 EChatEntryType_Typing}
|
||||
// &{STEAM_0:0:0 STEAM_0:1:22486691 bouh EChatEntryType_ChatMsg}
|
||||
// &{EClientPersonaStateFlag_GameDataBlob | EClientPersonaStateFlag_GameExtraInfo | EClientPersonaStateFlag_LastSeen | EClientPersonaStateFlag_PlayerName | EClientPersonaStateFlag_Presence | EClientPersonaStateFlag_QueryPort | EClientPersonaStateFlag_SourceID | EClientPersonaStateFlag_Status STEAM_0:1:23476646 EPersonaState_Away 0 274190 274190 Broforce 0 0 0 STEAM_0:0:0 [] moumoutte 1cebd6410e6ceb02af60d42a34ca355c5b3b41e6 1445034635 1445034642 0 1 1 false 0}
|
||||
//------------------------------------------------------------------------------
|
||||
// Servers list
|
||||
//------------------------------------------------------------------------------
|
||||
// 2015/10/18 11:43:49 [STEAM DEBUG] %!(EXTRA *steam.ClientCMListEvent=&{[185.25.180.14:27019 155.133.242.8:27019 185.25.180.15:27019 155.133.242.9:27017 185.25.180.15:27017 185.25.180.14:27018 155.133.242.9:27020 185.25.180.14:27017 185.25.180.15:27018 155.133.242.9:27019 155.133.242.8:27018 162.254.197.41:27020 162.254.197.41:27021 162.254.197.41:27017 162.254.197.42:27018 162.254.197.40:27019 185.25.180.14:27020 185.25.180.15:27020 162.254.197.42:27020 162.254.197.41:27018 155.133.242.9:27018 162.254.197.42:27017 162.254.197.42:27021 155.133.242.8:27020 162.254.197.42:27019 162.254.197.40:27017 162.254.197.40:27021 162.254.197.40:27020 155.133.242.8:27017 162.254.197.41:27019 162.254.197.40:27018 162.254.196.42:27019 162.254.196.42:27021 162.254.196.40:27017 162.254.196.42:27017 162.254.196.43:27021 162.254.196.41:27019 162.254.196.43:27017 162.254.196.41:27020 162.254.196.41:27021 162.254.196.43:27020 162.254.196.42:27018 162.254.196.41:27018 162.254.196.43:27019 162.254.196.42:27020 162.254.196.40:27018 162.254.196.40:27021 162.254.196.40:27020 162.254.196.43:27018 162.254.196.40:27019 162.254.196.41:27017 146.66.152.10:27019 146.66.152.11:27018 146.66.152.10:27018 146.66.152.11:27019 146.66.152.11:27017 146.66.152.10:27017 146.66.152.10:27020 146.66.152.11:27020 185.25.182.10:27019 185.25.182.10:27020 146.66.155.8:27019 185.25.182.10:27017 185.25.182.10:27018 146.66.155.8:27017 146.66.155.8:27020 146.66.155.8:27018 208.78.164.13:27018 208.78.164.10:27018 208.78.164.12:27018 208.78.164.10:27019 208.78.164.12:27019 208.78.164.9:27019 208.78.164.11:27019 208.78.164.14:27018 208.78.164.13:27019 208.78.164.11:27018 208.78.164.9:27018 208.78.164.13:27017 208.78.164.10:27017]})
|
||||
|
|
@ -0,0 +1,114 @@
|
|||
package xmpp
|
||||
|
||||
|
||||
import (
|
||||
// "github.com/emgee/go-xmpp"
|
||||
"go-xmpp"
|
||||
|
||||
"log"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const (
|
||||
Status_online = ""
|
||||
Status_offline = ""
|
||||
Status_away = "away"
|
||||
Status_chat = "chat"
|
||||
Status_do_not_disturb = "dnd"
|
||||
Status_extended_away = "xa"
|
||||
|
||||
Type_available = ""
|
||||
Type_unavailable = "unavailable"
|
||||
|
||||
ActionConnexion = "action_xmpp_connexion"
|
||||
ActionDeconnexion = "action_xmpp_deconnexion"
|
||||
|
||||
LogInfo = "\t[XMPP INFO]\t"
|
||||
LogError = "\t[XMPP ERROR]\t"
|
||||
LogDebug = "\t[XMPP DEBUG]\t"
|
||||
)
|
||||
|
||||
var (
|
||||
Addr = "127.0.0.1:5347"
|
||||
JidStr = ""
|
||||
Secret = ""
|
||||
|
||||
PreferedJID = ""
|
||||
|
||||
jid xmpp.JID
|
||||
stream = new(xmpp.Stream)
|
||||
comp = new(xmpp.XMPP)
|
||||
|
||||
ChanPresence = make(chan string)
|
||||
ChanMessage = make(chan string)
|
||||
ChanAction = make(chan string)
|
||||
|
||||
CurrentStatus = Status_offline
|
||||
)
|
||||
|
||||
|
||||
func Run() {
|
||||
log.Printf("%sRunning", LogInfo)
|
||||
// Create stream and configure it as a component connection.
|
||||
jid = must(xmpp.ParseJID(JidStr)).(xmpp.JID)
|
||||
stream = must(xmpp.NewStream(Addr, &xmpp.StreamConfig{LogStanzas: true})).(*xmpp.Stream)
|
||||
comp = must(xmpp.NewComponentXMPP(stream, jid, Secret)).(*xmpp.XMPP)
|
||||
|
||||
SendPresence(Status_online, Type_available)
|
||||
|
||||
mainXMPP()
|
||||
}
|
||||
|
||||
func mainXMPP() {
|
||||
for x := range comp.In {
|
||||
switch v := x.(type) {
|
||||
case *xmpp.Presence:
|
||||
if strings.SplitN(v.From, "/", 2)[0] == PreferedJID && v.To == JidStr {
|
||||
if v.Type == Type_unavailable {
|
||||
Disconnect()
|
||||
ChanAction <- ActionDeconnexion
|
||||
} else {
|
||||
// SendPresence(v.Show, v.Type)
|
||||
CurrentStatus = v.Show
|
||||
ChanAction <- ActionConnexion
|
||||
}
|
||||
|
||||
ChanPresence <- v.Show
|
||||
}
|
||||
|
||||
case *xmpp.Message:
|
||||
steamID := strings.SplitN(v.To, "@", 2)[0]
|
||||
ChanMessage <- steamID
|
||||
ChanMessage <- v.Body
|
||||
|
||||
default:
|
||||
log.Printf("%srecv: %v", LogDebug, x)
|
||||
}
|
||||
}
|
||||
|
||||
// Send deconnexion
|
||||
SendPresence(Status_offline, Type_unavailable)
|
||||
}
|
||||
|
||||
func must(v interface{}, err error) interface{} {
|
||||
if err != nil {
|
||||
log.Fatal(LogError, err)
|
||||
}
|
||||
return v
|
||||
}
|
||||
|
||||
func Disconnect() {
|
||||
SendPresence(Status_offline, Type_unavailable)
|
||||
}
|
||||
|
||||
func SendPresence(status, tpye string) {
|
||||
comp.Out <- xmpp.Presence{To: PreferedJID, From: jid.Domain, Show: status, Type: tpye}
|
||||
}
|
||||
|
||||
func SendPresenceFrom(status, tpye, from string) {
|
||||
comp.Out <- xmpp.Presence{To: PreferedJID, From: from, Show: status, Type: tpye}
|
||||
}
|
||||
|
||||
func SendMessage(from, message string) {
|
||||
comp.Out <- xmpp.Message{To: PreferedJID, From: from, Body: message}
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
# XMPP informations
|
||||
xmpp_server_address=192.168.1.2
|
||||
xmpp_server_port=5347
|
||||
xmpp_hostname=steam.kingpenguin.tk
|
||||
xmpp_secret=steam_gateway_password
|
||||
xmpp_authorized_jid=chteufleur@kingpenguin.tk
|
||||
|
||||
# Steam informations
|
||||
steam_login=toto
|
||||
steam_password=toto_password123$
|
||||
# steam_auth_code must be blank the first time. Then Valve will send the auth code to give here.
|
||||
steam_auth_code=CXD7J
|
||||
Loading…
Reference in New Issue