@@ -81,6 +81,18 @@ public async Task Handle(Message message)
8181 await ChangeState ( message , State . AddIssueSetIssueProjectId ) ;
8282 return ;
8383 }
84+
85+ if ( message . Text == $ "/{ Commands . AssignIssue } ")
86+ {
87+ if ( _conversationState . LastIssueId == 0 )
88+ {
89+ await ReplyMessage ( message , "No recently created issue exists." ) ;
90+ return ;
91+ }
92+
93+ await ChangeState ( message , State . AssignIssueSetUserId ) ;
94+ return ;
95+ }
8496 }
8597
8698 if ( _conversationState . State == State . RegisterSecret )
@@ -135,6 +147,13 @@ public async Task Handle(Message message)
135147 return ;
136148 }
137149
150+ if ( _conversationState . State == State . AssignIssueSetUserId )
151+ {
152+ await AssignIssue ( message ) ;
153+ await ChangeState ( message , State . Command ) ;
154+ return ;
155+ }
156+
138157 await ReplyMessage ( message , "Unknown text or command:\n " + message . Text ) ;
139158 }
140159
@@ -185,6 +204,11 @@ private async Task ChangeState(Message message, State state)
185204 {
186205 await ReplyMessage ( message , "Search pattern (type * for all):\n " ) ;
187206 }
207+ else if ( state == State . AssignIssueSetUserId )
208+ {
209+ await ReplyWithUserList ( message ) ;
210+ await ReplyMessage ( message , "User Id:\n " ) ;
211+ }
188212 }
189213
190214 private Task ReplyMessage ( Message message , string text )
@@ -221,7 +245,7 @@ private async Task ReplyWithProjectList(Message message, string searchPattern)
221245 {
222246 await ReplyMessage ( message , "No project found matching the filter." ) ;
223247 }
224-
248+
225249 await ChangeState ( message , State . Command ) ;
226250 }
227251
@@ -233,6 +257,14 @@ private async Task ReplyWithTrackerList(Message message)
233257 await ReplyMessage ( message , $ "Trackers:\n { trackersStr } ") ;
234258 }
235259
260+ private async Task ReplyWithUserList ( Message message )
261+ {
262+ var users = await _redmineApiClient . GetUsers ( ) ;
263+ var trackersStr = string . Join ( "\n " , users . OrderBy ( r => r . Id ) . Select ( r => $ "{ r . Id } ) { r . Login } ({ r . Firstname } { r . Lastname } )") ) ;
264+
265+ await ReplyMessage ( message , $ "Users:\n { trackersStr } ") ;
266+ }
267+
236268 private async Task AddIssue ( Message message )
237269 {
238270 var response = await _redmineApiClient . AddIssue ( _conversationState . CreateIssueModel ) ;
@@ -247,6 +279,21 @@ private async Task AddIssue(Message message)
247279 }
248280 }
249281
282+ private async Task AssignIssue ( Message message )
283+ {
284+ var model = new AssignIssueModel ( ) ;
285+ model . issue . assigned_to_id = int . Parse ( message . Text ) ;
286+ var response = await _redmineApiClient . AssignIssue ( _conversationState . LastIssueId , model ) ;
287+ if ( response . Errors != null && response . Errors . Count > 0 )
288+ {
289+ await ReplyMessage ( message , string . Join ( "\n " , response . Errors ) ) ;
290+ }
291+ else
292+ {
293+ await ReplyMessage ( message , "Issue assigned to user." ) ;
294+ }
295+ }
296+
250297 public void SaveState ( )
251298 {
252299 _conversationStateRepository . StoreConversationState ( _conversationState ) ;
0 commit comments