mirror of
https://github.com/Jetsparrow/jetherald.git
synced 2026-01-21 07:56:09 +03:00
Revert 41013783a4
This commit is contained in:
parent
404a6e5623
commit
a6f282e80c
@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Telegram.Bot.Args;
|
using Telegram.Bot.Args;
|
||||||
|
|
||||||
@ -7,7 +8,7 @@ namespace JetHerald
|
|||||||
{
|
{
|
||||||
public interface IChatCommand
|
public interface IChatCommand
|
||||||
{
|
{
|
||||||
string Execute(CommandString cmd, MessageEventArgs messageEventArgs);
|
Task<string> Execute(CommandString cmd, MessageEventArgs messageEventArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ChatCommandRouter
|
public class ChatCommandRouter
|
||||||
@ -24,7 +25,7 @@ namespace JetHerald
|
|||||||
Commands = new Dictionary<string, IChatCommand>();
|
Commands = new Dictionary<string, IChatCommand>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Execute(object sender, MessageEventArgs args)
|
public async Task<string> Execute(object sender, MessageEventArgs args)
|
||||||
{
|
{
|
||||||
var text = args.Message.Text;
|
var text = args.Message.Text;
|
||||||
if (CommandString.TryParse(text, out var cmd))
|
if (CommandString.TryParse(text, out var cmd))
|
||||||
@ -39,7 +40,7 @@ namespace JetHerald
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
Log.LogDebug($"Handling message via {Commands[cmd.Command].GetType().Name}");
|
Log.LogDebug($"Handling message via {Commands[cmd.Command].GetType().Name}");
|
||||||
return Commands[cmd.Command].Execute(cmd, args);
|
return await Commands[cmd.Command].Execute(cmd, args);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using MySql.Data.MySqlClient;
|
using MySql.Data.MySqlClient;
|
||||||
using Telegram.Bot.Args;
|
using Telegram.Bot.Args;
|
||||||
using Telegram.Bot.Types.Enums;
|
using Telegram.Bot.Types.Enums;
|
||||||
@ -14,7 +15,7 @@ namespace JetHerald.Commands
|
|||||||
this.db = db;
|
this.db = db;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Execute(CommandString cmd, MessageEventArgs messageEventArgs)
|
public async Task<string> Execute(CommandString cmd, MessageEventArgs messageEventArgs)
|
||||||
{
|
{
|
||||||
if (cmd.Parameters.Length < 1)
|
if (cmd.Parameters.Length < 1)
|
||||||
return null;
|
return null;
|
||||||
@ -31,7 +32,7 @@ namespace JetHerald.Commands
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var topic = db.CreateTopic(msg.From.Id, name, descr);
|
var topic = await db.CreateTopic(msg.From.Id, name, descr);
|
||||||
return $"created {topic.Name}\n" +
|
return $"created {topic.Name}\n" +
|
||||||
$"readToken\n{topic.ReadToken}\n" +
|
$"readToken\n{topic.ReadToken}\n" +
|
||||||
$"writeToken\n{topic.WriteToken}\n" +
|
$"writeToken\n{topic.WriteToken}\n" +
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
using Telegram.Bot.Args;
|
using System.Threading.Tasks;
|
||||||
|
using Telegram.Bot.Args;
|
||||||
using Telegram.Bot.Types.Enums;
|
using Telegram.Bot.Types.Enums;
|
||||||
|
|
||||||
namespace JetHerald.Commands
|
namespace JetHerald.Commands
|
||||||
@ -12,7 +13,7 @@ namespace JetHerald.Commands
|
|||||||
this.db = db;
|
this.db = db;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Execute(CommandString cmd, MessageEventArgs messageEventArgs)
|
public async Task<string> Execute(CommandString cmd, MessageEventArgs messageEventArgs)
|
||||||
{
|
{
|
||||||
if (cmd.Parameters.Length < 2)
|
if (cmd.Parameters.Length < 2)
|
||||||
return null;
|
return null;
|
||||||
@ -25,7 +26,7 @@ namespace JetHerald.Commands
|
|||||||
string name = cmd.Parameters[0];
|
string name = cmd.Parameters[0];
|
||||||
string adminToken = cmd.Parameters[1];
|
string adminToken = cmd.Parameters[1];
|
||||||
|
|
||||||
var topic = db.DeleteTopic(name, adminToken);
|
var topic = await db.DeleteTopic(name, adminToken);
|
||||||
return $"deleted {name} and all its subscriptions";
|
return $"deleted {name} and all its subscriptions";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using Telegram.Bot.Args;
|
using Telegram.Bot.Args;
|
||||||
|
|
||||||
namespace JetHerald
|
namespace JetHerald
|
||||||
@ -12,11 +13,11 @@ namespace JetHerald
|
|||||||
this.db = db;
|
this.db = db;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Execute(CommandString cmd, MessageEventArgs messageEventArgs)
|
public async Task<string> Execute(CommandString cmd, MessageEventArgs messageEventArgs)
|
||||||
{
|
{
|
||||||
var msg = messageEventArgs.Message;
|
var msg = messageEventArgs.Message;
|
||||||
var chatid = msg.Chat.Id;
|
var chatid = msg.Chat.Id;
|
||||||
var topics = db.GetTopicsForChat(chatid);
|
var topics = await db.GetTopicsForChat(chatid);
|
||||||
|
|
||||||
return topics.Any()
|
return topics.Any()
|
||||||
? "Topics:\n" + string.Join("\n", topics.Select(GetTopicListing))
|
? "Topics:\n" + string.Join("\n", topics.Select(GetTopicListing))
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
using Telegram.Bot.Args;
|
using System.Threading.Tasks;
|
||||||
|
using Telegram.Bot.Args;
|
||||||
|
|
||||||
namespace JetHerald
|
namespace JetHerald
|
||||||
{
|
{
|
||||||
@ -11,7 +12,7 @@ namespace JetHerald
|
|||||||
this.db = db;
|
this.db = db;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Execute(CommandString cmd, MessageEventArgs args)
|
public async Task<string> Execute(CommandString cmd, MessageEventArgs args)
|
||||||
{
|
{
|
||||||
if (cmd.Parameters.Length < 1)
|
if (cmd.Parameters.Length < 1)
|
||||||
return null;
|
return null;
|
||||||
@ -19,7 +20,7 @@ namespace JetHerald
|
|||||||
var chatid = args.Message.Chat.Id;
|
var chatid = args.Message.Chat.Id;
|
||||||
var token = cmd.Parameters[0];
|
var token = cmd.Parameters[0];
|
||||||
|
|
||||||
var topic = db.GetTopic(token, chatid);
|
var topic = await db.GetTopic(token, chatid);
|
||||||
|
|
||||||
if (topic == null)
|
if (topic == null)
|
||||||
return "topic not found";
|
return "topic not found";
|
||||||
@ -29,7 +30,7 @@ namespace JetHerald
|
|||||||
return "token mismatch";
|
return "token mismatch";
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
db.CreateSubscription(topic.TopicId, chatid);
|
await db.CreateSubscription(topic.TopicId, chatid);
|
||||||
return $"subscribed to {topic.Name}";
|
return $"subscribed to {topic.Name}";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
using Telegram.Bot.Args;
|
using System.Threading.Tasks;
|
||||||
|
using Telegram.Bot.Args;
|
||||||
|
|
||||||
namespace JetHerald
|
namespace JetHerald
|
||||||
{
|
{
|
||||||
@ -11,7 +12,7 @@ namespace JetHerald
|
|||||||
this.db = db;
|
this.db = db;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Execute(CommandString cmd, MessageEventArgs messageEventArgs)
|
public async Task<string> Execute(CommandString cmd, MessageEventArgs messageEventArgs)
|
||||||
{
|
{
|
||||||
if (cmd.Parameters.Length < 1)
|
if (cmd.Parameters.Length < 1)
|
||||||
return null;
|
return null;
|
||||||
@ -19,7 +20,7 @@ namespace JetHerald
|
|||||||
var msg = messageEventArgs.Message;
|
var msg = messageEventArgs.Message;
|
||||||
var chatid = msg.Chat.Id;
|
var chatid = msg.Chat.Id;
|
||||||
var topicName = cmd.Parameters[0];
|
var topicName = cmd.Parameters[0];
|
||||||
int affected = db.RemoveSubscription(topicName, chatid);
|
int affected = await db.RemoveSubscription(topicName, chatid);
|
||||||
if (affected >= 1)
|
if (affected >= 1)
|
||||||
return $"unsubscribed from {topicName}";
|
return $"unsubscribed from {topicName}";
|
||||||
else
|
else
|
||||||
|
|||||||
@ -8,9 +8,9 @@ namespace JetHerald.Controllers
|
|||||||
public class EchoController : ControllerBase
|
public class EchoController : ControllerBase
|
||||||
{
|
{
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public IActionResult Get(string msg)
|
public async Task<IActionResult> Get(string msg)
|
||||||
{
|
{
|
||||||
Task.Delay(100);
|
await Task.Delay(100);
|
||||||
return Ok(msg);
|
return Ok(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Runtime.Serialization;
|
using System.Runtime.Serialization;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
namespace JetHerald.Controllers
|
namespace JetHerald.Controllers
|
||||||
@ -18,15 +19,15 @@ namespace JetHerald.Controllers
|
|||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public IActionResult Post([FromBody] ReportArgs args)
|
public async Task<IActionResult> Post([FromBody] ReportArgs args)
|
||||||
{
|
{
|
||||||
var t = Db.GetTopic(args.Topic);
|
var t = await Db.GetTopic(args.Topic);
|
||||||
if (t == null)
|
if (t == null)
|
||||||
return new NotFoundResult();
|
return new NotFoundResult();
|
||||||
else if (!t.WriteToken.Equals(args.WriteToken, StringComparison.OrdinalIgnoreCase))
|
else if (!t.WriteToken.Equals(args.WriteToken, StringComparison.OrdinalIgnoreCase))
|
||||||
return StatusCode(403);
|
return StatusCode(403);
|
||||||
|
|
||||||
Herald.PublishMessage(t, args.Message);
|
await Herald.PublishMessage(t, args.Message);
|
||||||
return new OkResult();
|
return new OkResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
using MySql.Data.MySqlClient;
|
using MySql.Data.MySqlClient;
|
||||||
using Dapper;
|
using Dapper;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace JetHerald
|
namespace JetHerald
|
||||||
{
|
{
|
||||||
@ -20,11 +21,11 @@ namespace JetHerald
|
|||||||
public long? ChatId { get; set; }
|
public long? ChatId { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public int DeleteTopic(string name, string adminToken)
|
public async Task<int> DeleteTopic(string name, string adminToken)
|
||||||
{
|
{
|
||||||
using (var c = GetConnection())
|
using (var c = GetConnection())
|
||||||
{
|
{
|
||||||
return c.Execute(
|
return await c.ExecuteAsync(
|
||||||
" DELETE" +
|
" DELETE" +
|
||||||
" FROM topic" +
|
" FROM topic" +
|
||||||
" WHERE Name = @name AND AdminToken = @adminToken",
|
" WHERE Name = @name AND AdminToken = @adminToken",
|
||||||
@ -32,20 +33,20 @@ namespace JetHerald
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Topic GetTopic(string name)
|
public async Task<Topic> GetTopic(string name)
|
||||||
{
|
{
|
||||||
using (var c = GetConnection())
|
using (var c = GetConnection())
|
||||||
return c.QuerySingleOrDefault<Topic>(
|
return await c.QuerySingleOrDefaultAsync<Topic>(
|
||||||
"SELECT *" +
|
"SELECT *" +
|
||||||
" FROM topic" +
|
" FROM topic" +
|
||||||
" WHERE Name = @name",
|
" WHERE Name = @name",
|
||||||
new { name });
|
new { name });
|
||||||
}
|
}
|
||||||
|
|
||||||
public Topic GetTopic(string token, long chatId)
|
public async Task<Topic> GetTopic(string token, long chatId)
|
||||||
{
|
{
|
||||||
using (var c = GetConnection())
|
using (var c = GetConnection())
|
||||||
return c.QuerySingleOrDefault<Topic>(
|
return await c.QuerySingleOrDefaultAsync<Topic>(
|
||||||
" SELECT t.*, tc.ChatId " +
|
" SELECT t.*, tc.ChatId " +
|
||||||
" FROM topic t " +
|
" FROM topic t " +
|
||||||
" LEFT JOIN topic_chat tc ON t.TopicId = tc.TopicId AND tc.ChatId = @chatId " +
|
" LEFT JOIN topic_chat tc ON t.TopicId = tc.TopicId AND tc.ChatId = @chatId " +
|
||||||
@ -53,7 +54,7 @@ namespace JetHerald
|
|||||||
new { token, chatId});
|
new { token, chatId});
|
||||||
}
|
}
|
||||||
|
|
||||||
public Topic CreateTopic(long userId, string name, string descr)
|
public async Task<Topic> CreateTopic(long userId, string name, string descr)
|
||||||
{
|
{
|
||||||
var t = new Topic
|
var t = new Topic
|
||||||
{
|
{
|
||||||
@ -66,7 +67,7 @@ namespace JetHerald
|
|||||||
};
|
};
|
||||||
using (var c = GetConnection())
|
using (var c = GetConnection())
|
||||||
{
|
{
|
||||||
return c.QuerySingleOrDefault<Topic>(
|
return await c.QuerySingleOrDefaultAsync<Topic>(
|
||||||
" INSERT INTO herald.topic " +
|
" INSERT INTO herald.topic " +
|
||||||
" ( CreatorId, Name, Description, ReadToken, WriteToken, AdminToken) " +
|
" ( CreatorId, Name, Description, ReadToken, WriteToken, AdminToken) " +
|
||||||
" VALUES " +
|
" VALUES " +
|
||||||
@ -75,20 +76,20 @@ namespace JetHerald
|
|||||||
t);
|
t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public IEnumerable<long> GetChatIdsForTopic(uint topicid)
|
public async Task<IEnumerable<long>> GetChatIdsForTopic(uint topicid)
|
||||||
{
|
{
|
||||||
using (var c = GetConnection())
|
using (var c = GetConnection())
|
||||||
return c.Query<long>(
|
return await c.QueryAsync<long>(
|
||||||
" SELECT ChatId" +
|
" SELECT ChatId" +
|
||||||
" FROM topic_chat" +
|
" FROM topic_chat" +
|
||||||
" WHERE TopicId = @topicid",
|
" WHERE TopicId = @topicid",
|
||||||
new { topicid });
|
new { topicid });
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<Topic> GetTopicsForChat(long chatid)
|
public async Task<IEnumerable<Topic>> GetTopicsForChat(long chatid)
|
||||||
{
|
{
|
||||||
using (var c = GetConnection())
|
using (var c = GetConnection())
|
||||||
return c.Query<Topic>(
|
return await c.QueryAsync<Topic>(
|
||||||
" SELECT t.*" +
|
" SELECT t.*" +
|
||||||
" FROM topic_chat ct" +
|
" FROM topic_chat ct" +
|
||||||
" JOIN topic t on t.TopicId = ct.TopicId" +
|
" JOIN topic t on t.TopicId = ct.TopicId" +
|
||||||
@ -96,10 +97,10 @@ namespace JetHerald
|
|||||||
new { chatid });
|
new { chatid });
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CreateSubscription(uint topicId, long chatId)
|
public async Task CreateSubscription(uint topicId, long chatId)
|
||||||
{
|
{
|
||||||
using (var c = GetConnection())
|
using (var c = GetConnection())
|
||||||
c.Execute(
|
await c.ExecuteAsync(
|
||||||
" INSERT INTO topic_chat" +
|
" INSERT INTO topic_chat" +
|
||||||
" (ChatId, TopicId )" +
|
" (ChatId, TopicId )" +
|
||||||
" VALUES" +
|
" VALUES" +
|
||||||
@ -107,10 +108,10 @@ namespace JetHerald
|
|||||||
new { topicId, chatId });
|
new { topicId, chatId });
|
||||||
}
|
}
|
||||||
|
|
||||||
public int RemoveSubscription(string topicName, long chatId)
|
public async Task<int> RemoveSubscription(string topicName, long chatId)
|
||||||
{
|
{
|
||||||
using (var c = GetConnection())
|
using (var c = GetConnection())
|
||||||
return c.Execute(
|
return await c.ExecuteAsync(
|
||||||
" DELETE tc " +
|
" DELETE tc " +
|
||||||
" FROM topic_chat tc" +
|
" FROM topic_chat tc" +
|
||||||
" JOIN topic t ON tc.TopicId = t.TopicId " +
|
" JOIN topic t ON tc.TopicId = t.TopicId " +
|
||||||
|
|||||||
@ -53,15 +53,15 @@ namespace JetHerald
|
|||||||
Client.StartReceiving();
|
Client.StartReceiving();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PublishMessage(Db.Topic topic, string message)
|
public async Task PublishMessage(Db.Topic topic, string message)
|
||||||
{
|
{
|
||||||
var chatIds = Db.GetChatIdsForTopic(topic.TopicId);
|
var chatIds = await Db.GetChatIdsForTopic(topic.TopicId);
|
||||||
var formatted = $"|{topic.Description}|:\n{message}";
|
var formatted = $"|{topic.Description}|:\n{message}";
|
||||||
foreach (var c in chatIds)
|
foreach (var c in chatIds)
|
||||||
_ = Client.SendTextMessageAsync(c, formatted);
|
await Client.SendTextMessageAsync(c, formatted);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BotOnMessageReceived(object sender, MessageEventArgs messageEventArgs)
|
async void BotOnMessageReceived(object sender, MessageEventArgs messageEventArgs)
|
||||||
{
|
{
|
||||||
var msg = messageEventArgs.Message;
|
var msg = messageEventArgs.Message;
|
||||||
if (msg == null || msg.Type != MessageType.Text)
|
if (msg == null || msg.Type != MessageType.Text)
|
||||||
@ -69,9 +69,9 @@ namespace JetHerald
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var reply = Commands.Execute(sender, messageEventArgs);
|
var reply = await Commands.Execute(sender, messageEventArgs);
|
||||||
if (reply != null)
|
if (reply != null)
|
||||||
_ = Client.SendTextMessageAsync(
|
await Client.SendTextMessageAsync(
|
||||||
chatId: msg.Chat.Id,
|
chatId: msg.Chat.Id,
|
||||||
text: reply,
|
text: reply,
|
||||||
replyToMessageId: msg.MessageId);
|
replyToMessageId: msg.MessageId);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user