【C#】Slackからemojiを一括ダウンロードするツールを作った

概要

複数Slack Team間のemojiの同期をしたかったので、emojiを一括ダウンロードしてくるツールをC#で書きました。

Chrome拡張のSlack Emoji Toolsと合わせることで、一括でのemojiのお引っ越しが出来ます。

動作

f:id:notargs:20170516183940p:plain f:id:notargs:20170516183946p:plain

コード

"ここにトークンを入力"ここ(https://api.slack.com/custom-integrations/legacy-tokens)から引っ張ってきたTokenをぶち込みましょう。

あと、参照にSystem.Runtime.Serializationを追加してください。

/*
SlackEmojiDownloader

Copyright (c) 2017 Yutaka Sato

This software is released under the MIT License.
http://opensource.org/licenses/mit-license.php
*/
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;

namespace SlackEmojiDownloader
{
    [DataContract]
    internal class EmojiResponce
    {
        [DataMember(Name = "ok")] private bool _ok;
        [DataMember(Name = "emoji")] private Dictionary<string, string> _emoji;

        public bool Ok => _ok;
        public Dictionary<string, string> Emoji => _emoji;
    }

    internal class Program
    {
        private static void Main(string[] args)
        {
            const string folderName = "Images";
            const string url = "https://slack.com/api/emoji.list?pretty=1&token=";
            const string token = "ここにトークンを入力";

            Stream stream;
            using (var webClient = new WebClient())
            {
                stream = webClient.OpenRead(url + token);
            }
            if (stream == null) return;

            var settings = new DataContractJsonSerializerSettings {UseSimpleDictionaryFormat = true};
            var jsonSerializer = new DataContractJsonSerializer(typeof(EmojiResponce), settings);
            var jsonObj = jsonSerializer.ReadObject(stream) as EmojiResponce;

            Directory.CreateDirectory(folderName);

            if (jsonObj == null) return;
            
            foreach (var keyValuePair in jsonObj.Emoji)
            {
                var value = keyValuePair.Value;
                var key = keyValuePair.Key;
                var fileName = Path.Combine(folderName, key + Path.GetExtension(value));
                Console.WriteLine(fileName);
                var webClient = new WebClient();
                if (value.Substring(0, 5) == "alias") continue;
                webClient.DownloadFile(new Uri(value), fileName);
            }
        }
    }
}

【Unity】World空間で楽にCanvasのサイズを設定するためのエディタ拡張を作った

ことはじめ

VRなどで、3Dの空間(World Space)でCanvasを使いたくなることはよくあると思います。

文字のサイズやSpriteなどはピクセル単位での指定となるため、実際の位置とピクセル空間での位置を二重で考えなければならず、頭がこんがらがります。

f:id:notargs:20170511201447g:plain

「なんで3Dするのにピクセルのことを一々考えなければいけないんや!」と思ったので、楽するためのエディタ拡張を作ってみました。

続きを読む

【Unity】空のフォルダを一括で削除してくれるエディタ拡張を作った

ことはじめ

gitではフォルダは基本的に管理されず、中にファイルが有った場合にはフォルダを作る、という仕組みになっています。

対して、Unityではフォルダごとにmetaファイルが生成されるようになっています。

そのため、Unityのプロジェクトをgitで管理しているとき、他の人が削除したフォルダがローカルで反映されず、再度metaファイルが生成されてしまうなどの事故が起こりがちです。

その都度ローカルでも不要なフォルダを削除してやれば問題ないのですが、地味に面倒な作業だったため、自動で消してくれるエディタ拡張を作りました。

続きを読む

ブログ乱立の始まり

ことはじめ

最近、コスト削減&セキュリティの強化を目的に、ブログをWordPressからHugoへ移行しました。

WordPressの魅力

WordPressは、PHPで書かれた多量のテンプレートや多量のプラグインがある、非常に大規模なブログエンジンです。

しかしながら、それはまた弱点でもあります。

  • エンジンのコードを編集し、自分好みのシステムに作り変えるといったこと。
  • cssを編集し、自分で一からデザインを作り直すこと。
  • 運用コストも高く、小銭稼ぎで始めたはずのブログが赤字となってしまいました。ページビューが少ないのが原因ですが。

大規模が故に、それらの道がとても険しくなっていたのです。

続きを読む