Skip to content

Instantly share code, notes, and snippets.

@guitarrapc
Last active May 8, 2016 19:20
Show Gist options
  • Save guitarrapc/4bb29bdb9f18310da5a2d4da458c2a60 to your computer and use it in GitHub Desktop.
Save guitarrapc/4bb29bdb9f18310da5a2d4da458c2a60 to your computer and use it in GitHub Desktop.
{
"bindings": [
{
"type": "httpTrigger",
"direction": "in",
"name": "req",
"authLevel": "function"
},
{
"type": "http",
"direction": "out",
"name": "res"
}
],
"disabled": false
}
{
"frameworks": {
"net46":{
"dependencies": {
"Microsoft.CodeAnalysis.Scripting": "1.2.1"
}
}
}
}
#load "..\EnumerableExtensions.csx"
#r "System.Web"
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Threading.Tasks;
using System.Web;
using Newtonsoft.Json;
private const string TRIGGER_WORD = "@C#:";
private const string SlackWebhookUrl = "Input your Slack Notification Azure Functions Url";
public static async Task<object> Run(HttpRequestMessage req, TraceWriter log)
{
log.Verbose("Outgoding webhook Charp Compiler service was triggered!");
var content = await req.Content.ReadAsStringAsync();
log.Verbose(content);
var data = content
.Split('&')
.Select(x => x.Split('='))
.ToDictionary(x => x[0], x => HttpUtility.HtmlDecode(HttpUtility.UrlDecode(x[1])));
if (data["user_name"] == "slackbot")
{
return req.CreateResponse(HttpStatusCode.BadRequest, new {
body = "Cannot Support Messages From SlackBot.",
});
}
var text = data["text"] as string ?? "";
log.Verbose(text);
var code = text.Replace(TRIGGER_WORD, "");
// Evaluate C# Code with Roslyn
log.Verbose($"{nameof(code)} : {code}");
var resultText = await EvaluateCSharpAsync(code);
log.Verbose(resultText);
// デバッグ用
log.Verbose(res.StatusCode.ToString());
log.Verbose(res.Error);
// Send back with Slack Incoming Webhook
var message = string.IsNullOrWhiteSpace(resultText) ? "空だニャ" : resultText;
var payload = new
{
channel = "#azurefunctions",
username = "C# Evaluator",
text = message,
icon_url = "https://azure.microsoft.com/svghandler/visual-studio-team-services/?width=300&height=300",
};
var jsonString = JsonConvert.SerializeObject(payload);
using (var client = new HttpClient())
{
var res = await client.PostAsync(SlackWebhookUrl, new StringContent(jsonString, Encoding.UTF8, "application/json"));
return req.CreateResponse(res.StatusCode, new {
body = $"CSharp Evaluate message. Message : {message}",
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment