それっぽくVisual C#版 Skype de TRPG 支援ツールが出来た
Visual C#で、何とかそれっぽいツールを作ることが出来た。
機能は「」とほぼ同じ。違うのはツール実行者の発言も拾ってくれることくらいである。
まだC#はよく分からないし、SkypeAPIもいまいち分かっていないのだが、ネット上の情報を探りながら何とか出来た次第。
とても「出来た!」とソースをお見せ出来る状態にはないのだが、より上を目指すためにもここに公開しておく。どう作るのがより良いのか、などはこれから学んでいくことにしよう。
参考サイト: Skype Community > c# using skype4com in threads
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using SKYPE4COMLib; using System.Threading; using System.Collections; using System.Text.RegularExpressions; namespace SkypeDeTRPG { public partial class MainForm : Form { private Skype skype = new Skype(); private Chat chat; private string strMessage; private Hashtable htbThread = new Hashtable(); public MainForm() { InitializeComponent(); skype.MessageStatus += new _ISkypeEvents_MessageStatusEventHandler(skype_MessageStatus); } private void MainForm_Load(object sender, EventArgs e) { try { if (!skype.Client.IsRunning) { skype.Client.Start(false, true); } } catch (Exception) { // All Skype Logic uses TRY for safety } try { //Skypeと接続 skype.Attach(7, false); } catch (Exception) { //MessageBox.Show("Konnte nicht verbinden", "Verbindungsproblem", MessageBoxButtons.RetryCancel); } } void skype_MessageStatus(ChatMessage pMessage, TChatMessageStatus Status) { string outputMessage = ""; string Name = ""; if (pMessage.Status == TChatMessageStatus.cmsReceived || pMessage.Status==TChatMessageStatus.cmsSent) { chat = skype.get_Chat(pMessage.Chat.Name); strMessage = pMessage.Body.ToLower().ToString(); Name = pMessage.FromDisplayName; if (strMessage.Substring(0, 4) == "サイコロ" || strMessage.Substring(0, 4) == "さいころ") { strMessage = strMessage.Replace("さいころ", ""); //トリガーとなる文字「さいころ」を削除 strMessage = strMessage.Replace("サイコロ", ""); //トリガーとなる文字「サイコロ」を削除 strMessage = strMessage.Replace(" ", ""); //空白を削除 //全角→半角変換 var str = ""; var han = "0123456789-+Dd"; var zen = "0123456789−+Dd"; var c = ""; var n = 0; string kekka = ""; for (var i = 0; i < strMessage.Length; i++) { c = strMessage.Substring(i, 1); n = zen.IndexOf(c, 0); if (n >= 0) c = han.Substring(n, 1); str += c; } strMessage = str; strMessage = strMessage.ToLower(); //小文字に変換 //サイコロを振る var temp = strMessage.Split('+'); var total = 0; // Random クラスの新しいインスタンスを生成する Random cRandom = new System.Random(); for (var i = 0; i < temp.Length; i++) { var kekkaTemp = 0; if (temp[i].IndexOf('d', 0) >= 0) { var dice = temp[i].Split('d'); if (dice[0] == "") dice[0] = "1"; //省略された場合はダイス1つ for (int j = 0; j < int.Parse(dice[0]); j++) { if (dice[1] == "") dice[1] = "6"; //省略された場合は6面ダイス var rand = cRandom.Next(1, int.Parse(dice[1])); kekkaTemp = kekkaTemp + rand; total = total + rand; //合計の算出 kekka = kekka + " と " + kekkaTemp; } } else { kekka = kekka + " に " + int.Parse(temp[i]) + " を足して"; total = total + int.Parse(temp[i]); //合計の算出 } } //結果出力 if (total != 0) { kekka = kekka.Substring(3); if(kekka.IndexOf("を足して", 0) < 0) kekka = kekka + " で"; outputMessage = '■' + Name + "さん> コロコロ…… " + kekka + " 合計 " + total + " です"; //メッセージの出力 chat.SendMessage(outputMessage.ToString()); } } } } } }