Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature (other-stuff): New action to quickly upload images to imgur #1059

Merged
merged 5 commits into from
Dec 18, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
97 changes: 97 additions & 0 deletions actions/upload_image_to_imgur.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
const { ImgurClient } = require('imgur');

module.exports = {
name: 'Upload Image To Imgur',
section: 'Other Stuff',

subtitle() {
return `Upload Image to Imgur`;
},

variableStorage(data, varType) {
const type = parseInt(data.storage, 10);
if (type !== varType) return;
return [data.varName2, 'Image URL'];
},

fields: ['clientID', 'clientSecret', 'refreshToken', 'imageURL', 'storage', 'varName2'],

html() {
return `
<div style="padding-top: 8px; display: flex; flex-direction: column; gap: 10px;">
<div style="display: flex; gap: 10px;">
<div style="width: 33%;">
Client ID:<br>
<input id="clientID" class="round" type="text" style="width: 100%;">
</div>
<div style="width: 33%;">
Client Secret (optional):<br>
<input id="clientSecret" class="round" type="text" style="width: 100%;">
</div>
<div style="width: 33%;">
Refresh Token (optional):<br>
<input id="refreshToken" class="round" type="text" style="width: 100%;">
</div>
</div>
<div style="display: flex; gap: 10px;">
<div style="width: 50%;">
Image URL:<br>
<input id="imageURL" class="round" type="text" style="width: 100%;">
</div>
<div style="width: 50%;">
Store In:<br>
<select id="storage" class="round" style="width: 100%;">
<option value="0">None</option>
<option value="1">Temp Variable</option>
<option value="2">Server Variable</option>
<option value="3">Global Variable</option>
</select>
</div>
</div>

<div>
Variable Name:<br>
<input id="varName2" class="round" type="text" style="width: 100%;">
</div>
</div>`;
},

init() {},

action(cache) {
const data = cache.actions[cache.index];
const clientID = this.evalMessage(data.clientID, cache);
const clientSecret = this.evalMessage(data.clientSecret, cache);
const refreshToken = this.evalMessage(data.refreshToken, cache);
const imageURL = this.evalMessage(data.imageURL, cache);
const varName2 = this.evalMessage(data.varName2, cache);
const storage = parseInt(data.storage, 10);

if (!clientID || !imageURL) {
console.error('Client ID or Image URL is missing!');
return this.callNextAction(cache);
}

const client = new ImgurClient({
clientId: clientID,
clientSecret: clientSecret || undefined,
refreshToken: refreshToken || undefined,
});

client
.upload({
image: imageURL,
type: 'url',
})
.then((response) => {
const uploadedImageUrl = response.data.link;
this.storeValue(uploadedImageUrl, storage, varName2, cache);
this.callNextAction(cache);
})
.catch((err) => {
console.error('Error uploading image to Imgur:', err.message);
this.callNextAction(cache);
});
},
mod() {},
};
Loading