-
Notifications
You must be signed in to change notification settings - Fork 0
Implement global CactusBot packet specification #2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,8 +1,99 @@ | ||
| package schemas | ||
|
|
||
| // MessagePacket is the low-level format for storing contents of a message and arguments | ||
| type MessagePacket struct { | ||
| Data string `json:"data" validate:"required"` | ||
| Text string `json:"text" validate:"required"` | ||
| Type string `json:"type" validate:"required"` | ||
| import ( | ||
| "strings" | ||
| ) | ||
|
|
||
| type Message struct { | ||
| Text []Component `json:"text"` // FIXME: Anything besides [] breaks this. It is assumed that this is due to the interface being used for Component. | ||
|
||
| Action bool `json:"action"` | ||
| } | ||
|
|
||
| type Component interface { | ||
| Text() string | ||
| } | ||
|
|
||
| func (t Text) Text() string { | ||
| return t.Data | ||
| } | ||
|
|
||
| func (e Emoji) Text() string { | ||
| return e.Data | ||
| } | ||
|
|
||
| func (t Tag) Text() string { | ||
| return t.Data | ||
| } | ||
|
|
||
| func (u URL) Text() string { | ||
| return u.Data | ||
| } | ||
|
|
||
| func (v Variable) Text() string { | ||
| return v.Data | ||
| } | ||
|
|
||
| type Text struct { | ||
| Data string `json:"data"` | ||
| } | ||
| type Emoji struct { | ||
| Data string `json:"data"` | ||
| } | ||
| type Tag struct { | ||
| Data string `json:"data"` | ||
| } | ||
| type URL struct { | ||
| Data string `json:"data"` | ||
| } | ||
| type Variable struct { | ||
| Data string `json:"data"` | ||
| } | ||
|
|
||
| type Channel string | ||
| type User string | ||
| type Service string | ||
|
|
||
| type Context struct { | ||
| Packet Message `json:"packet"` | ||
| Channel Channel `json:"channel"` | ||
| User User `json:"user,omitempty"` | ||
| Role Role `json:"role,omitempty"` | ||
| Target User `json:"target,omitempty"` | ||
| Service Service `json:"service"` | ||
| } | ||
|
|
||
| type Role int | ||
|
|
||
| const ( | ||
| banned Role = iota | ||
| user | ||
| subscriber | ||
| moderator | ||
| owner | ||
| ) | ||
|
|
||
| func (r *Role) UnmarshalJSON(b []byte) error { | ||
| str := strings.Trim(string(b), `"`) | ||
|
|
||
| switch { | ||
| case str == "banned": | ||
| *r = banned | ||
|
|
||
| case str == "user": | ||
| *r = user | ||
|
|
||
| case str == "subscriber": | ||
| *r = subscriber | ||
|
|
||
| case str == "moderator": | ||
| *r = moderator | ||
|
|
||
| case str == "owner": | ||
| *r = owner | ||
|
|
||
| default: | ||
| *r = user | ||
| } | ||
|
|
||
| return nil | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -55,21 +55,18 @@ func pullVals(ift reflect.Type, ifv reflect.Value) (map[string]interface{}, map[ | |
| id = subID | ||
| } | ||
| } | ||
| // Anything after the first element is tags, figure out which we want | ||
| for _, tag := range split[1:] { | ||
| // Need to set the keys w/ their names here if it's a struct | ||
| switch tag { | ||
| case "attr": | ||
| // Attribute | ||
| attr[split[0]] = value | ||
| case "meta": | ||
| // Meta information about the request | ||
| meta[split[0]] = value | ||
| case "primary": | ||
| // It's the primary key/record ID | ||
| id = ifv.Field(i).String() | ||
| default: // Ignore any other tags | ||
| } | ||
| // Need to set the keys w/ their names here if it's a struct | ||
| switch split[0] { | ||
|
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @RPiAwesomeness Will this change have any negative side effects? |
||
| case "attr": | ||
| // Attribute | ||
| attr[split[1]] = value | ||
| case "meta": | ||
| // Meta information about the request | ||
| meta[split[1]] = value | ||
| case "primary": | ||
| // It's the primary key/record ID | ||
| id = ifv.Field(i).String() | ||
| default: // Ignore any other tags | ||
| } | ||
| } | ||
|
|
||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
None of these fields seem to be automatically populated. (Instead, it looks like they're just "made up" later on.) I'm assuming this is still WIP?