11
11
*/
12
12
13
13
import { SelectMenuBuilder } from '@discordjs/builders'
14
- import { parse } from 'date-fns'
15
14
import { addDays } from 'date-fns/addDays'
16
15
import { eachDayOfInterval } from 'date-fns/eachDayOfInterval'
17
16
import { format } from 'date-fns/format'
18
- import { Client , Events , GatewayIntentBits , ActionRowBuilder , EmbedBuilder , TextChannel } from 'discord.js'
19
- import { MongoClient } from 'mongodb'
17
+ import { Client , Events , GatewayIntentBits , ActionRowBuilder , TextChannel } from 'discord.js'
18
+ import { MongoClient , ReturnDocument } from 'mongodb'
19
+ import { getDiscordEmbedFromDbResult } from '../shared/dnd-poll-embed'
20
20
; ( async ( ) => {
21
21
console . info ( '[start]' )
22
22
await sendMessage ( )
@@ -28,44 +28,12 @@ function getDays() {
28
28
return eachDayOfInterval ( { start : current , end : addDays ( current , 13 ) } )
29
29
}
30
30
31
- function parseDate ( str : string ) {
32
- return parse ( str , 'yyyy-MM-dd' , new Date ( ) )
33
- }
34
-
35
31
async function sendMessage ( ) {
36
32
const client = await getClient ( )
37
33
const channel = ( await client . channels . fetch ( process . env . DISCORD_DND_POLL_CHANNEL ! ) ) as TextChannel
38
34
const days = getDays ( )
39
35
const result = await createDbRecord ( days )
40
- const voted = new Set ( Object . values ( result . dates ) . flat ( 1 ) )
41
- const embedopen = new EmbedBuilder ( )
42
- . setTitle (
43
- `Dates for ${ format ( parseDate ( result . from ) , 'EEEE dd/MM/yy' ) } to ${ format ( parseDate ( result . to ) , 'EEEE dd/MM/yy' ) } `
44
- )
45
- . setAuthor ( { name : 'Hobby Scheduler' } )
46
- . addFields (
47
- Object . entries ( result . dates )
48
- . map ( ( [ d , v ] : any ) => ( {
49
- name : `${ format ( d , 'dd/MM - EEEE' ) } ` ,
50
- value : `${
51
- v . length === 0 ? ':red_circle:' : v . length === result . members . length ? ':green_circle:' : ':orange_circle:'
52
- } - ${ v . length } /${ result . members . length } `,
53
- } ) )
54
- . concat ( [
55
- {
56
- name : 'Voted' ,
57
- value : [ ...voted ] . map ( ( m ) => `<@${ m } >` ) . join ( ', ' ) || 'No one' ,
58
- } ,
59
- {
60
- name : 'Waiting on' ,
61
- value :
62
- result . members
63
- . filter ( ( m ) => ! voted . has ( m ) )
64
- . map ( ( m ) => `<@${ m } >` )
65
- . join ( ', ' ) || 'No one' ,
66
- } ,
67
- ] )
68
- )
36
+ const embedopen = getDiscordEmbedFromDbResult ( result )
69
37
const _message = await channel . send ( {
70
38
embeds : [ embedopen ] ,
71
39
components : [
@@ -80,7 +48,6 @@ async function sendMessage() {
80
48
) ,
81
49
] ,
82
50
} )
83
- console . info ( { result } )
84
51
await client . destroy ( )
85
52
}
86
53
@@ -97,10 +64,16 @@ async function createDbRecord(days: Date[]) {
97
64
from,
98
65
to,
99
66
dates : days . reduce ( ( acc , d ) => ( { ...acc , [ format ( d , 'yyyy-MM-dd' ) ] : [ ] } ) ) ,
100
- members : [ '137678852628545539' , '185741150714331136' , '217741486115127297' ] ,
67
+ members : [
68
+ '137678852628545539' ,
69
+ '185741150714331136' ,
70
+ '217741486115127297' ,
71
+ '272791476340260865' ,
72
+ '361624461243449345' ,
73
+ ] ,
101
74
} ,
102
75
} ,
103
- { upsert : true }
76
+ { upsert : true , returnDocument : ReturnDocument . AFTER }
104
77
)
105
78
await client . close ( )
106
79
return result
0 commit comments