Skip to content

Commit

Permalink
Merge branch 'release/1.2.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
alaingilbert committed Sep 21, 2018
2 parents 16616d9 + e0169f6 commit bd66487
Show file tree
Hide file tree
Showing 6 changed files with 2,419 additions and 4 deletions.
62 changes: 61 additions & 1 deletion ogame.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import (
// Wrapper all available functions to control ogame bot
type Wrapper interface {
GetSession() string
AddAccount(number int, lang string) (NewAccount, error)
GetServer() Server
SetUserAgent(newUserAgent string)
ServerURL() string
Expand Down Expand Up @@ -1131,7 +1132,7 @@ func extractPlanetFromSelection(s *goquery.Selection, b *OGame) (Planet, error)
}

txt := goquery.NewDocumentFromNode(root).Text()
planetInfosRgx := regexp.MustCompile(`([^\[]+) \[(\d+):(\d+):(\d+)]([\d.]+)km \((\d+)/(\d+)\)(?:de )?([-\d]+).+C\s*(?:bis|to|à|a) ([-\d]+).+C`)
planetInfosRgx := regexp.MustCompile(`([^\[]+) \[(\d+):(\d+):(\d+)]([\d.]+)km \((\d+)/(\d+)\)(?:de )?([-\d]+).+C\s*(?:bis|para|to|à|a) ([-\d]+).+C`)
m := planetInfosRgx.FindStringSubmatch(txt)
if len(m) < 10 {
return Planet{}, errors.New("failed to parse planet infos: " + txt)
Expand Down Expand Up @@ -1301,6 +1302,22 @@ func name2id(name string) ID {
"sondedespionnage": EspionageProbeID,
"satellitesolaire": SolarSatelliteID,

// br
"cacaligeiro": LightFighterID,
"cacapesado": HeavyFighterID,
"cruzador": CruiserID,
"navedebatalha": BattleshipID,
"interceptador": BattlecruiserID,
"bombardeiro": BomberID,
"destruidor": DestroyerID,
"estreladamorte": DeathstarID,
"cargueiropequeno": SmallCargoID,
"cargueirogrande": LargeCargoID,
"navecolonizadora": ColonyShipID,
"sondadeespionagem": EspionageProbeID,
//"reciclador": RecyclerID,
//"satelitesolar": SolarSatelliteID,

// jp
"軽戦闘機": LightFighterID,
"重戦闘機": HeavyFighterID,
Expand Down Expand Up @@ -1350,6 +1367,8 @@ func extractUserInfos(pageHTML, lang string) (UserInfos, error) {
infosRgx = regexp.MustCompile(`([\d\\.]+) \(Platz ([\d.]+) von ([\d.]+)\)`)
case "es":
infosRgx = regexp.MustCompile(`([\d\\.]+) \(Lugar ([\d.]+) de ([\d.]+)\)`)
case "br":
infosRgx = regexp.MustCompile(`([\d\\.]+) \(Posi\\u00e7\\u00e3o ([\d.]+) de ([\d.]+)\)`)
case "jp":
infosRgx = regexp.MustCompile(`([\d\\.]+) \(([\d.]+)\\u4eba\\u4e2d([\d.]+)\\u4f4d\)`)
}
Expand Down Expand Up @@ -2832,6 +2851,47 @@ func (b *OGame) GetSession() string {
return b.ogameSession
}

type NewAccount struct {
ID int
Server struct {
Language string
Number int
}
}

// AddAccount add a new account (server) to your list of accounts
func (b *OGame) AddAccount(number int, lang string) (NewAccount, error) {
var payload struct {
Language string `json:"language"`
Number int `json:"number"`
}
payload.Language = lang
payload.Number = number
jsonPayloadBytes, err := json.Marshal(&payload)
if err != nil {
return NewAccount{}, err
}
req, err := http.NewRequest("PUT", "https://lobby-api.ogame.gameforge.com/users/me/accounts", strings.NewReader(string(jsonPayloadBytes)))
if err != nil {
return NewAccount{}, err
}
req.Header.Add("Content-Type", "application/json")
resp, err := b.client.Do(req)
if err != nil {
return NewAccount{}, err
}
defer resp.Body.Close()
by, err := ioutil.ReadAll(resp.Body)
if err != nil {
return NewAccount{}, err
}
var newAccount NewAccount
if err := json.Unmarshal(by, &newAccount); err != nil {
return NewAccount{}, err
}
return newAccount, nil
}

// GetServer get ogame server information that the bot is connected to
func (b *OGame) GetServer() Server {
return b.server
Expand Down
25 changes: 25 additions & 0 deletions ogame_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,8 @@ func TestName2id(t *testing.T) {
assert.Equal(t, LightFighterID, name2id("Light Fighter"))
assert.Equal(t, LightFighterID, name2id("Chasseur léger"))
assert.Equal(t, LightFighterID, name2id("Leichter Jäger"))
assert.Equal(t, LightFighterID, name2id("Caça Ligeiro"))
assert.Equal(t, HeavyFighterID, name2id("Caça Pesado"))
assert.Equal(t, LargeCargoID, name2id("Großer Transporter"))
assert.Equal(t, DestroyerID, name2id("Zerstörer"))
assert.Equal(t, SmallCargoID, name2id("Nave pequeña de carga"))
Expand Down Expand Up @@ -270,6 +272,14 @@ func TestExtractUserInfos_fr(t *testing.T) {
assert.Equal(t, 3348, infos.Total)
}

func TestExtractUserInfos_br(t *testing.T) {
pageHTMLBytes, _ := ioutil.ReadFile("samples/br/overview.html")
infos, _ := extractUserInfos(string(pageHTMLBytes), "br")
assert.Equal(t, 0, infos.Points)
assert.Equal(t, 1026, infos.Rank)
assert.Equal(t, 1268, infos.Total)
}

func TestExtractPlanets_fieldsFilled(t *testing.T) {
pageHTMLBytes, _ := ioutil.ReadFile("samples/overview_fields_filled.html")
planets := extractPlanets(string(pageHTMLBytes), nil)
Expand Down Expand Up @@ -330,6 +340,21 @@ func TestExtractPlanets_fr(t *testing.T) {
assert.Equal(t, 12800, planets[0].Diameter)
}

func TestExtractPlanets_br(t *testing.T) {
pageHTMLBytes, _ := ioutil.ReadFile("samples/br/overview.html")
planets := extractPlanets(string(pageHTMLBytes), &OGame{language: "br"})
assert.Equal(t, 1, len(planets))
assert.Equal(t, PlanetID(33633767), planets[0].ID)
assert.Equal(t, Coordinate{Galaxy: 1, System: 449, Position: 12}, planets[0].Coordinate)
assert.Equal(t, "Planeta Principal", planets[0].Name)
assert.Equal(t, "https://gf3.geo.gfsrv.net/cdne8/41d05740ce1a534f5ec77feb11f100.png", planets[0].Img)
assert.Equal(t, -13, planets[0].Temperature.Min)
assert.Equal(t, 27, planets[0].Temperature.Max)
assert.Equal(t, 5, planets[0].Fields.Built)
assert.Equal(t, 193, planets[0].Fields.Total)
assert.Equal(t, 12800, planets[0].Diameter)
}

func TestExtractGalaxyInfos_honorableTarget(t *testing.T) {
pageHTMLBytes, _ := ioutil.ReadFile("samples/galaxy_debris.html")
infos, _ := extractGalaxyInfos(string(pageHTMLBytes), "Commodore Nomade", 123, 456)
Expand Down
6 changes: 3 additions & 3 deletions planet.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ type Fields struct {
}

// HasFieldAvailable returns either or not we can still build on this planet
func (f *Fields) HasFieldAvailable() bool {
func (f Fields) HasFieldAvailable() bool {
return f.Built < f.Total
}

Expand All @@ -19,8 +19,8 @@ type Temperature struct {
Max int
}

// Mean returns the mean temperature of the planet
func (t *Temperature) Mean() int {
// Mean returns the planet mean temperature
func (t Temperature) Mean() int {
return int(math.Round(float64(t.Min+t.Max) / 2))
}

Expand Down
10 changes: 10 additions & 0 deletions planet_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,16 @@ import (
"github.com/stretchr/testify/assert"
)

func TestFields_HasFieldAvailable(t *testing.T) {
assert.True(t, Fields{Built: 10, Total: 11}.HasFieldAvailable())
assert.False(t, Fields{Built: 11, Total: 11}.HasFieldAvailable())
}

func TestTemperature_Mean(t *testing.T) {
assert.Equal(t, 5, Temperature{Min: 0, Max: 10}.Mean())
assert.Equal(t, 0, Temperature{Min: -10, Max: 10}.Mean())
}

func TestExtractDefense(t *testing.T) {
pageHTMLBytes, _ := ioutil.ReadFile("samples/defence.html")
defense, _ := extractDefense(string(pageHTMLBytes))
Expand Down
Loading

0 comments on commit bd66487

Please sign in to comment.