@@ -4,14 +4,19 @@ use github_flows::{
4
4
get_octo, listen_to_event,
5
5
octocrab:: { models:: events:: payload:: EventPayload , models:: events:: payload:: IssuesEventAction } ,
6
6
} ;
7
- use openai_flows:: { chat_completion, ChatOptions , ChatModel } ;
7
+ use openai_flows:: { chat_completion, ChatModel , ChatOptions } ;
8
8
use std:: env;
9
9
10
10
#[ no_mangle]
11
11
#[ tokio:: main( flavor = "current_thread" ) ]
12
12
pub async fn run ( ) {
13
13
dotenv ( ) . ok ( ) ;
14
14
15
+ let login: String = match env:: var ( "login" ) {
16
+ Err ( _) => "alabulei1" . to_string ( ) ,
17
+ Ok ( name) => name,
18
+ } ;
19
+
15
20
let owner: String = match env:: var ( "owner" ) {
16
21
Err ( _) => "second-state" . to_string ( ) ,
17
22
Ok ( name) => name,
@@ -27,29 +32,41 @@ pub async fn run() {
27
32
Ok ( name) => name,
28
33
} ;
29
34
30
- listen_to_event ( & owner, & repo, vec ! [ "issue_comment" , "issues" ] , |payload| {
31
- handler ( & owner, & repo, & openai_key_name, payload)
32
- } )
35
+ listen_to_event (
36
+ & login,
37
+ & owner,
38
+ & repo,
39
+ vec ! [ "issue_comment" , "issues" ] ,
40
+ |payload| handler ( & owner, & repo, & openai_key_name, payload) ,
41
+ )
33
42
. await ;
34
43
}
35
44
36
45
async fn handler ( owner : & str , repo : & str , openai_key_name : & str , payload : EventPayload ) {
37
46
let octo = get_octo ( Some ( String :: from ( owner) ) ) ;
38
47
let issues = octo. issues ( owner, repo) ;
39
48
40
-
41
49
match payload {
42
50
EventPayload :: IssueCommentEvent ( e) => {
43
- if e. comment . user . r#type != "Bot" {
51
+ let last_comment_id = store_flows:: get ( "last_created_comment" ) . unwrap_or_default ( ) ;
52
+ if e. comment . id . into_inner ( ) != last_comment_id. as_u64 ( ) . unwrap_or_default ( ) {
44
53
if let Some ( b) = e. comment . body {
45
54
if let Some ( r) = chat_completion (
46
55
openai_key_name,
47
56
& format ! ( "issue#{}" , e. issue. number) ,
48
57
& b,
49
58
& ChatOptions :: default ( ) ,
50
59
) {
51
- if let Err ( e) = issues. create_comment ( e. issue . number , r. choice ) . await {
52
- write_error_log ! ( e. to_string( ) ) ;
60
+ match issues. create_comment ( e. issue . number , r. choice ) . await {
61
+ Ok ( comment) => {
62
+ store_flows:: set (
63
+ "last_created_comment" ,
64
+ serde_json:: to_value ( comment. id . into_inner ( ) ) . unwrap ( ) ,
65
+ ) ;
66
+ }
67
+ Err ( e) => {
68
+ write_error_log ! ( e. to_string( ) ) ;
69
+ }
53
70
}
54
71
}
55
72
}
@@ -69,7 +86,7 @@ async fn handler(owner: &str, repo: &str, openai_key_name: &str, payload: EventP
69
86
let co = ChatOptions {
70
87
model : ChatModel :: GPT4 ,
71
88
restart : true ,
72
- restarted_sentence : Some ( & prompt)
89
+ restarted_sentence : Some ( & prompt) ,
73
90
} ;
74
91
75
92
if let Some ( r) = chat_completion (
@@ -78,8 +95,16 @@ async fn handler(owner: &str, repo: &str, openai_key_name: &str, payload: EventP
78
95
& prompt,
79
96
& co,
80
97
) {
81
- if let Err ( e) = issues. create_comment ( e. issue . number , r. choice ) . await {
82
- write_error_log ! ( e. to_string( ) ) ;
98
+ match issues. create_comment ( e. issue . number , r. choice ) . await {
99
+ Ok ( comment) => {
100
+ store_flows:: set (
101
+ "last_created_comment" ,
102
+ serde_json:: to_value ( comment. id . into_inner ( ) ) . unwrap ( ) ,
103
+ ) ;
104
+ }
105
+ Err ( e) => {
106
+ write_error_log ! ( e. to_string( ) ) ;
107
+ }
83
108
}
84
109
}
85
110
}
0 commit comments