MCPcopy Create free account
hub / github.com/daodst/chat / CreateEvent

Method CreateEvent

test/room.go:119–187  ·  view source on GitHub ↗

Create an event in this room but do not insert it. Does not modify the room in any way (depth, fwd extremities, etc) so is thread-safe.

(t *testing.T, creator *User, eventType string, content interface{}, mods ...eventModifier)

Source from the content-addressed store, hash-verified

117
118// Create an event in this room but do not insert it. Does not modify the room in any way (depth, fwd extremities, etc) so is thread-safe.
119func (r *Room) CreateEvent(t *testing.T, creator *User, eventType string, content interface{}, mods ...eventModifier) *gomatrixserverlib.HeaderedEvent {
120 t.Helper()
121 depth := 1 + len(r.events) // depth starts at 1
122
123 // possible event modifiers (optional fields)
124 mod := &eventMods{}
125 for _, m := range mods {
126 m(mod)
127 }
128
129 if mod.privKey == nil {
130 mod.privKey = creator.privKey
131 }
132 if mod.keyID == "" {
133 mod.keyID = creator.keyID
134 }
135 if mod.originServerTS.IsZero() {
136 mod.originServerTS = time.Now()
137 }
138 if mod.origin == "" {
139 mod.origin = creator.srvName
140 }
141
142 var unsigned gomatrixserverlib.RawJSON
143 var err error
144 if mod.unsigned != nil {
145 unsigned, err = json.Marshal(mod.unsigned)
146 if err != nil {
147 t.Fatalf("CreateEvent[%s]: failed to marshal unsigned field: %s", eventType, err)
148 }
149 }
150
151 builder := &gomatrixserverlib.EventBuilder{
152 Sender: creator.ID,
153 RoomID: r.ID,
154 Type: eventType,
155 StateKey: mod.stateKey,
156 Depth: int64(depth),
157 Unsigned: unsigned,
158 }
159 err = builder.SetContent(content)
160 if err != nil {
161 t.Fatalf("CreateEvent[%s]: failed to SetContent: %s", eventType, err)
162 }
163 if depth > 1 {
164 builder.PrevEvents = []gomatrixserverlib.EventReference{r.events[len(r.events)-1].EventReference()}
165 }
166
167 eventsNeeded, err := gomatrixserverlib.StateNeededForEventBuilder(builder)
168 if err != nil {
169 t.Fatalf("CreateEvent[%s]: failed to StateNeededForEventBuilder: %s", eventType, err)
170 }
171 refs, err := eventsNeeded.AuthEventReferences(&r.authEvents)
172 if err != nil {
173 t.Fatalf("CreateEvent[%s]: failed to AuthEventReferences: %s", eventType, err)
174 }
175 builder.AuthEvents = refs
176 ev, err := builder.Build(

Callers 2

CreateAndInsertMethod · 0.95

Calls

no outgoing calls

Tested by 1