refactor: Add message.Author.ID(), remove a bunch of type assertions

This commit is contained in:
Andrey Petrov 2016-09-15 15:00:50 -04:00
parent e86996e6b5
commit 7f2b8e4689
7 changed files with 23 additions and 23 deletions

View File

@ -111,7 +111,7 @@ func InitCommands(c *Commands) {
c.Add(Command{
Prefix: "/help",
Handler: func(room *Room, msg message.CommandMsg) error {
op := room.IsOp(msg.From().(Member))
op := room.IsOp(msg.From())
room.Send(message.NewSystemMsg(room.commands.Help(op), msg.From()))
return nil
},
@ -150,7 +150,7 @@ func InitCommands(c *Commands) {
if len(args) != 1 {
return ErrMissingArg
}
member, ok := room.MemberByID(msg.From().(Member).ID())
member, ok := room.MemberByID(msg.From().ID())
if !ok {
return ErrMissingMember
}
@ -253,7 +253,7 @@ func InitCommands(c *Commands) {
PrefixHelp: "[USER]",
Help: "Hide messages from USER, /unignore USER to stop hiding.",
Handler: func(room *Room, msg message.CommandMsg) error {
from, ok := room.Member(msg.From().(Member))
from, ok := room.Member(msg.From())
if !ok {
return ErrMissingMember
}
@ -278,7 +278,7 @@ func InitCommands(c *Commands) {
return nil
}
if id == msg.From().(Member).ID() {
if id == msg.From().ID() {
return errors.New("cannot ignore self")
}
target, ok := room.MemberByID(id)
@ -302,7 +302,7 @@ func InitCommands(c *Commands) {
Prefix: "/unignore",
PrefixHelp: "USER",
Handler: func(room *Room, msg message.CommandMsg) error {
from, ok := room.Member(msg.From().(Member))
from, ok := room.Member(msg.From())
if !ok {
return ErrMissingMember
}

View File

@ -16,7 +16,6 @@ type roomMember struct {
type Member interface {
message.Author
ID() string
SetName(string)
Config() message.UserConfig

View File

@ -7,6 +7,7 @@ import (
)
type Author interface {
ID() string
Name() string
Color() int
}

View File

@ -39,7 +39,7 @@ func HandledScreen(name string, handler func(Message) error) *handledScreen {
func Screen(name string) *baseScreen {
return &baseScreen{
User: NewUser(name),
user: NewUser(name),
}
}
@ -71,7 +71,7 @@ func (u *pipedScreen) Send(m Message) error {
// User container that knows about writing to an IO screen.
type baseScreen struct {
sync.Mutex
*User
*user
}
func (u *baseScreen) Config() UserConfig {

View File

@ -8,7 +8,7 @@ import (
const reHighlight = `\b(%s)\b`
// User definition, implemented set Item interface and io.Writer
type User struct {
type user struct {
joined time.Time
name string
@ -16,8 +16,8 @@ type User struct {
replyTo Author // Set when user gets a /msg, for replying.
}
func NewUser(name string) *User {
u := User{
func NewUser(name string) *user {
u := user{
name: name,
config: DefaultUserConfig,
joined: time.Now(),
@ -27,18 +27,18 @@ func NewUser(name string) *User {
return &u
}
func (u *User) Name() string {
func (u *user) Name() string {
return u.name
}
func (u *User) Color() int {
func (u *user) Color() int {
return u.config.Seed
}
func (u *User) ID() string {
func (u *user) ID() string {
return SanitizeName(u.name)
}
func (u *User) Joined() time.Time {
func (u *user) Joined() time.Time {
return u.joined
}

View File

@ -92,7 +92,7 @@ func (r *Room) HandleMsg(m message.Message) {
roomMember := item.Value().(*roomMember)
user := roomMember.Member
if fromMsg != nil && fromMsg.From() != nil && roomMember.Ignored.In(fromMsg.From().(Member).ID()) {
if fromMsg != nil && fromMsg.From() != nil && roomMember.Ignored.In(fromMsg.From().ID()) {
// Skip because ignored
return
}
@ -182,7 +182,7 @@ func (r *Room) Rename(oldID string, u Member) error {
// Member returns a corresponding Member object to a User if the Member is
// present in this room.
func (r *Room) Member(u Member) (*roomMember, bool) {
func (r *Room) Member(u message.Author) (*roomMember, bool) {
m, ok := r.MemberByID(u.ID())
if !ok {
return nil, false
@ -204,7 +204,7 @@ func (r *Room) MemberByID(id string) (*roomMember, bool) {
}
// IsOp returns whether a user is an operator in this room.
func (r *Room) IsOp(u Member) bool {
func (r *Room) IsOp(u message.Author) bool {
return r.Ops.In(u.ID())
}

10
host.go
View File

@ -353,7 +353,7 @@ func (h *Host) InitCommands(c *chat.Commands) {
}
var whois string
switch room.IsOp(msg.From().(chat.Member)) {
switch room.IsOp(msg.From()) {
case true:
whois = whoisAdmin(target)
case false:
@ -389,7 +389,7 @@ func (h *Host) InitCommands(c *chat.Commands) {
PrefixHelp: "USER [DURATION]",
Help: "Set USER as admin.",
Handler: func(room *chat.Room, msg message.CommandMsg) error {
if !room.IsOp(msg.From().(chat.Member)) {
if !room.IsOp(msg.From()) {
return errors.New("must be op")
}
@ -435,7 +435,7 @@ func (h *Host) InitCommands(c *chat.Commands) {
Help: "Ban USER from the server.",
Handler: func(room *chat.Room, msg message.CommandMsg) error {
// TODO: Would be nice to specify what to ban. Key? Ip? etc.
if !room.IsOp(msg.From().(chat.Member)) {
if !room.IsOp(msg.From()) {
return errors.New("must be op")
}
@ -475,7 +475,7 @@ func (h *Host) InitCommands(c *chat.Commands) {
PrefixHelp: "USER",
Help: "Kick USER from the server.",
Handler: func(room *chat.Room, msg message.CommandMsg) error {
if !room.IsOp(msg.From().(chat.Member)) {
if !room.IsOp(msg.From()) {
return errors.New("must be op")
}
@ -513,7 +513,7 @@ func (h *Host) InitCommands(c *chat.Commands) {
room.Send(message.NewSystemMsg(motd, user))
return nil
}
if !room.IsOp(user.(chat.Member)) {
if !room.IsOp(user) {
return errors.New("must be OP to modify the MOTD")
}