-
Notifications
You must be signed in to change notification settings - Fork 0
/
Code.js
210 lines (172 loc) · 6.01 KB
/
Code.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
/******************************************************************************
* Slash Commands Project!
*
* A Google Chat bot script used bring back the power of slash commands.
*
*
* Created by: E.Cope (Last edit: 5/4/21)
*******************************************************************************/
// Handle any GET requests with a redirect to the landing page:
const doGet = () => {
const html = `<div style="text-align: center; margin-top: 25%;">
<h2>If the redirect didn't work, see this project's landing page
<a href="https://slash-commands-landing-page.netlify.app/">
here</a>.
</h2>
<script>
location.href="https://slash-commands-landing-page.netlify.app/"
</script>
</div>`
return HtmlService.createHtmlOutput(html)
}
// TESTS:
const test = () => {
const fakeEvent = {
"message": {
"sender": {
"name": 'Sender',
"displayName": 'Sender Display Name'
},
"text": '/short https://script.google.com/home/projects/1DkqkGtWF_4Szm2v2bPh19wvQlCd_flUH5QwcLPY5gYgGQVwyluHqiYUd/edit',
"argumentText": ' https://script.google.com/home/projects/1DkqkGtWF_4Szm2v2bPh19wvQlCd_flUH5QwcLPY5gYgGQVwyluHqiYUd/edit'
},
"user": {
"name": 'bleep bloops',
"displayName": 'bloopity',
}
}
Logger.log()
}
/** ============================================================================ *
== == == == == == == == GOOGLE CHAT BOT EVENT LISTENERS == == == == == == ==
** ============================================================================ */
/**
* Responds to an ADDED_TO_SPACE event in Hangouts Chat.
* @param {Object} event the event object from Hangouts Chat.
*/
const onAddToSpace = (event) => {
return {'text': `Slash Commands Have Been Activated! This bot is currently in development.
See our site here: https://cutt.ly/qbjBAt7`}
}
/**
* Responds to a REMOVED_FROM_SPACE event in Hangouts Chat.
* @param {Object} e The event object from Hangouts Chat.
*/
const onRemoveFromSpace = (event) => {
const name = (event.space.name ? event.space.name : "the chat.")
console.info(`Slash Commands removed from ${name}`)
}
/**
* Responds to a MESSAGE event in Hangouts Chat.
* @param {Object} event the event object from Hangouts Chat
*/
const onMessage = (event) => {
const slashy = event.message.slashCommand
let response = Object()
// [CASE] Is A Slash Command:
if (slashy) {
switch (slashy.commandId) {
// Astronomy Picture of the Day (/APOD [id:3])
case 3:
apod = getAPOD()
title = "Astronomy Picture of the Day"
subtitle = apod.title
hdImage = apod.hdurl
thumbnail = apod.thumbnail_url
icon = "https://cdn.alzashop.com/ImgW.ashx?fd=f3&cd=GMERCHb905g"
link = apod.url
// [CASE] Media Type is a Video:
if (apod.media_type === 'video') {
response = createImgCard(thumbnail, link, title, subtitle, icon)
}
// [CASE] Media Type is Image:
else {
response = createImgCard(hdImage, link, title, subtitle, icon)
}
break
// XKCD COMICS API: (/xkcd [id:5]) ✔️
case 5:
xkcd = getXkcdComic()
link = "https://xkcd.com/"
title = "XKCD Comic of the Day"
subtitle = xkcd.safe_title
icon = "http://www.userlogos.org/files/logos/signify/xkcd.png"
image = xkcd.img
// Form response card:
response = createImgCard(image, link, title, subtitle, icon)
break
// ROLL DA DICE: (/roll [id:6]) ✔️
case 6:
response['text'] = rollDice(event)
break
// DOG API (/doggo [id:7]) ✔️
case 7:
dog = getDog()
img = dog.message
title = "🌭 The Dog Generator! 🐶"
icon = "https://d2q79iu7y748jz.cloudfront.net/s/_squarelogo/3fb6a75c11d342c9c124a73d6c6e1a58"
// Grab the breed name from the response URL.
urlList = img.split('/')
getBreed = urlList[4]
breedName = 'hotdog'
// Format breed name:
// [CASE] Breed has two parts:
if (getBreed.includes('-')) {
arr = getBreed.split('-')
breedName = `${arr[1]} ${arr[0]}`
}
// [CASE] Breed has only one part:
else {
breedName = getBreed
}
subtitle = `Featured breed: ${toTitleCase(breedName)}`
// Form response card:
response = createImgCard(img, img, title, subtitle, icon)
break
// URL SHORTENER (/shorty [id:8]) ✔️
case 8:
response['text'] = getCuttly(event)
break
// WORDS API (/wordy [id:10])
case 10:
response['text'] = "⚙️ Coming Soon! 🚧"
break
// JOKE API (/jokester [id:11])
case 11:
justJokin = getJoke()
// [CASE] One-part joke:
if (justJokin.type == 'single') {
response['text'] = justJokin.joke
}
// [CASE] Two-part joke:
else {
response['text'] = `*${justJokin.setup}*\n\n_${justJokin.delivery}_`
}
break
// GENIUS API (/genius-lyrics [id:21])
case 21:
response['text'] = "⚙️ Coming Soon! 🚧"
break
// CHATTERBOX (/chatterbox [id:30])
case 30:
response['text'] = "⚙️ Coming Soon! 🚧"
break
// IF ALL ELSE FAILS!
default:
response['text'] = "Sorry, that's not a supported slash command."
break
}
}
// [CASE] Not a Slash Command --> Generate Random Reply:
else {
const sayings = ["Chill bro, chill 🧊",
"Look at you, doin' things 👀",
"nope, no slashy enought",
"hmmm, I don't think so",
"Well, you tried"
]
response['text'] = choose(sayings)
}
// Return the response object to the chat.
return response
}