diff --git a/event.go b/event.go index 87fb98d..b0aa421 100644 --- a/event.go +++ b/event.go @@ -49,6 +49,7 @@ const ( KindSimpleGroupRemovePermission int = 9004 KindSimpleGroupDeleteEvent int = 9005 KindSimpleGroupEditGroupStatus int = 9006 + KindSimpleGroupCreateGroup int = 9007 KindSimpleGroupJoinRequest int = 9021 KindZapRequest int = 9734 KindZap int = 9735 diff --git a/nip29/nip29.go b/nip29/nip29.go index 74defb7..1cdcc6f 100644 --- a/nip29/nip29.go +++ b/nip29/nip29.go @@ -33,6 +33,7 @@ var ModerationEventKinds = KindRange{ nostr.KindSimpleGroupRemovePermission, nostr.KindSimpleGroupDeleteEvent, nostr.KindSimpleGroupEditGroupStatus, + nostr.KindSimpleGroupCreateGroup, } var MetadataEventKinds = KindRange{ diff --git a/nip29/relay/relay.go b/nip29/relay/relay.go index 11315ed..43e6a17 100644 --- a/nip29/relay/relay.go +++ b/nip29/relay/relay.go @@ -159,6 +159,9 @@ var moderationActionFactories = map[int]func(*nostr.Event) (Action, error){ return egs, nil }, + nostr.KindSimpleGroupCreateGroup: func(evt *nostr.Event) (Action, error) { + return &CreateGroup{evt.PubKey}, nil + }, } type DeleteEvent struct { @@ -297,3 +300,22 @@ func (a EditGroupStatus) Apply(group *nip29.Group) { group.LastMetadataUpdate = a.When } + +type CreateGroup struct { + Creator string +} + +func (CreateGroup) PermissionName() nip29.Permission { return nip29.PermEditGroupStatus } +func (a CreateGroup) Apply(group *nip29.Group) { + group.Members[a.Creator] = &nip29.Role{ + Permissions: map[nip29.Permission]struct{}{ + nip29.PermAddUser: {}, + nip29.PermRemoveUser: {}, + nip29.PermEditMetadata: {}, + nip29.PermAddPermission: {}, + nip29.PermRemovePermission: {}, + nip29.PermDeleteEvent: {}, + nip29.PermEditGroupStatus: {}, + }, + } +}