* Qiita-Artikel kopieren und einfügen
hier
@textchan create 絵文字!
in Slack
Lassen Sie uns einen Bot erstellen, der das Bild hochlädt.
Warum wir es machen
Für Teams, die in Slack häufig benutzerdefinierte Emojis verwenden,
Es gibt viele benutzerdefinierte Emojis, die nur Buchstaben enthalten.
Außerdem wird es oft vom Benutzer erstellt.
Gerade dort, wo Ingenieure eine aktive Rolle spielen,
Es ist nicht ungewöhnlich, dass jeder Ingenieur nicht über ein Designtool wie Photoshop verfügt.
Es besteht kein Zweifel, dass die Zeit, die zum Erstellen eines benutzerdefinierten Emojis benötigt wird, Ihre Arbeit beeinflusst. Es sollte effizient sein.
Beispiel)
glücklich / Wenn ich glücklich bin
zur Schule gehen / Wenn ich zur Schule gehe
Warum brauchen wir Nur-Text-Emoji
Sie können eine Reaktion auf einen Beitrag senden, die sofort gelesen werden kann.
Als Gefühl können Sie es jetzt als Status neben der ID anzeigen
Erstellen
Beim Erstellen eines Bildes aus Text
Kann Canvas auf Node.js node-canvas
generieren Ich fand es gut.
Es kann genauso verwendet werden, wie
Außerdem auf Slack Botkit
, um Erwähnungen zu erkennen und Bilder hochzuladen benutzen.
# node-canvas を動かすためのライブラリのインストール
# こちらは MacでHomebrewでインストールする場合
# その他 https://github.com/Automattic/node-canvas#installation
brew install pkg-config cairo pango libpng jpeg giflib
# node packageのインストール
npm install --save node-canvas botkit
Referenzen
- Erstellen Sie eine Slack Bot-Entwicklungsumgebung mit BotKit in 5 bis 15 Minuten (Windows)
- So fügen Sie die Konfiguration von Slack Bots usw. hinzu
- Wie man Dateien mit dem Botkit von Slack hochlädt
- Einfache Bildbearbeitung mit Canvas (ImageData) in Node.js
- Andere Repositories
GitHub-Repository Ja
Der Code auf Qiita ist teilweise vereinfacht
// index.js
const Botkit = require('botkit')
const canvas = require('./canvas')
if (!process.env.token) {
console.log('Error: Specify token in environment')
process.exit(1)
}
const controller = Botkit.slackbot({
debug: false
})
controller.spawn({
token: process.env.token
}).startRTM(function (err) {
if (err) {
throw new Error(err)
}
})
controller.hears('create(.*)', ['direct_message', 'direct_mention', 'mention'], function (bot, message) {
var setting = {
text: '',
color: '#000',
fontFamily: 'YuGothic'
}
var args = message.match[1]
var reg = /\s+(["“”][^"“”]+["“”]|[^ ]+)/g
var arg, i = 0
while (arg = reg.exec(args)) {
arg = arg[1].replace(/^["“”](.*)["“”]$/, '$1')
switch (i) {
case 0:
setting.text = arg
break
case 1:
setting.color = arg
break
case 2:
setting.fontFamily = arg
break
}
i++
}
canvas(setting).then(function (fileObj) {
var messageObj = fileObj
messageObj.channels = message.channel
bot.api.files.upload(messageObj, function (err, res) {
if (err) console.log(err)
})
})
})
▲ Beschreiben Sie Prozesse wie die Erkennung von Erwähnungen und Bild-Uploads auf Slack
// canvas.js
const Canvas = require('canvas')
const fs = require('fs')
var insertStr = function (str, index, insert) {
return str.slice(0, index) + insert + str.slice(index, str.length);
}
var canvas_to_base64 = function (c) {
return c.toDataURL().split(',')[1]
}
var decode_and_copy = function (string, filename) {
return new Promise(function (resolve, reject) {
var buffer = new Buffer(string, 'base64')
fs.writeFile(filename, buffer, function (err) {
if (err) {
reject(err)
return
}
resolve()
})
})
}
async function canvas(setting, next) {
setting = setting || {
text: 'えもじ!',
color: '#000',
fontFamily: 'YuGothic'
}
const text_n = insertStr(setting.text, 2, '\n')
const filename = './' + setting.text + '.png'
const c = new Canvas(128, 128)
const ctx = c.getContext('2d')
ctx.font = 'bold 60px ' + setting.fontFamily
ctx.textAlign = 'center'
ctx.fillStyle = setting.color
ctx.fillText(text_n, 64, 56)
await decode_and_copy(canvas_to_base64(c), filename)
const fileObj = {
file: fs.createReadStream(filename),
filename: setting.text + '.png',
title: setting.text
}
return fileObj
}
module.exports = canvas
▲ Beschreiben Sie den Vorgang zum Konvertieren von Text in ein Bild
Dieses Mal wird nur verarbeitet, um 4 Doppelbyte-Zeichen in 2 Zeilen mit 2 Zeichen und 2 Zeichen umzuwandeln
bewegen
# [Slack API Token] は適宜置き換え
token=[Slack API Token] node index.js
@textchan create 絵文字!
@textchan create 赤・明朝 red "YuMincho"
vielleicht kommen diese wieder
Einmal herunterladen und als benutzerdefiniertes Emoji hinzufügen
Aufgaben
- Generieren Sie wunderschöne Bilder auch mit anderen Zeichen als 4 Double-Byte-Zeichen
- Die Leinwand wird einmal als Bilddatei gespeichert und die Bilddatei wird gelesen, aber das ist wahrscheinlich unnötige Arbeit
- Verfügbare Schriftarten hängen vom Computer oder Server ab
- Ich möchte benutzerdefinierte Emojis automatisch hinzufügen
Ende
Genießen Sie Ihr benutzerdefiniertes Emoji-Leben.