mirror of
https://gitlab.com/Kwoth/nadekobot.git
synced 2025-09-10 17:28:27 -04:00
- you should be able to update your .atl now without disabling it
- capitalization of language input in .atl should no longer matter
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using LinqToDB.EntityFrameworkCore;
|
using LinqToDB.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
using NadekoBot.Services.Database.Models;
|
using NadekoBot.Services.Database.Models;
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Searches
|
namespace NadekoBot.Modules.Searches
|
||||||
@@ -8,6 +9,8 @@ namespace NadekoBot.Modules.Searches
|
|||||||
public static class AtlExtensions
|
public static class AtlExtensions
|
||||||
{
|
{
|
||||||
public static Task<AutoTranslateChannel> GetByChannelId(this IQueryable<AutoTranslateChannel> set, ulong channelId)
|
public static Task<AutoTranslateChannel> GetByChannelId(this IQueryable<AutoTranslateChannel> set, ulong channelId)
|
||||||
=> set.FirstOrDefaultAsyncLinqToDB(x => x.ChannelId == channelId);
|
=> set
|
||||||
|
.Include(x => x.Users)
|
||||||
|
.FirstOrDefaultAsyncEF(x => x.ChannelId == channelId);
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -4,6 +4,7 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using AngleSharp.Common;
|
||||||
using Discord;
|
using Discord;
|
||||||
using Discord.Net;
|
using Discord.Net;
|
||||||
using LinqToDB;
|
using LinqToDB;
|
||||||
@@ -12,6 +13,7 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using NadekoBot.Common.ModuleBehaviors;
|
using NadekoBot.Common.ModuleBehaviors;
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using NadekoBot.Services;
|
using NadekoBot.Services;
|
||||||
|
using NadekoBot.Services.Database;
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Searches
|
namespace NadekoBot.Modules.Searches
|
||||||
{
|
{
|
||||||
@@ -49,7 +51,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
foreach (var c in cs)
|
foreach (var c in cs)
|
||||||
{
|
{
|
||||||
_atcs[c.ChannelId] = c.AutoDelete;
|
_atcs[c.ChannelId] = c.AutoDelete;
|
||||||
_users[c.ChannelId] = new(c.Users.ToDictionary(x => x.UserId, x => (x.Source, x.Target)));
|
_users[c.ChannelId] = new(c.Users.ToDictionary(x => x.UserId, x => (x.Source.ToLower(), x.Target.ToLower())));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -162,11 +164,19 @@ namespace NadekoBot.Modules.Searches
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void UpdateUser(ulong channelId, ulong userId, string from, string to)
|
||||||
|
{
|
||||||
|
var dict = _users.GetOrAdd(channelId, new ConcurrentDictionary<ulong, (string, string)>());
|
||||||
|
dict[userId] = (from, to);
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<bool?> RegisterUserAsync(ulong userId, ulong channelId, string from, string to)
|
public async Task<bool?> RegisterUserAsync(ulong userId, ulong channelId, string from, string to)
|
||||||
{
|
{
|
||||||
|
if (!_google.Languages.ContainsKey(from) || !_google.Languages.ContainsKey(to))
|
||||||
|
return null;
|
||||||
|
|
||||||
var ctx = _db.GetDbContext();
|
var ctx = _db.GetDbContext();
|
||||||
var ch = await ctx.AutoTranslateChannels
|
var ch = await ctx.AutoTranslateChannels
|
||||||
.ToLinqToDBTable()
|
|
||||||
.GetByChannelId(channelId);
|
.GetByChannelId(channelId);
|
||||||
|
|
||||||
if (ch is null)
|
if (ch is null)
|
||||||
@@ -186,19 +196,25 @@ namespace NadekoBot.Modules.Searches
|
|||||||
|
|
||||||
await ctx.SaveChangesAsync();
|
await ctx.SaveChangesAsync();
|
||||||
|
|
||||||
var dict = _users.GetOrAdd(channelId, new ConcurrentDictionary<ulong, (string, string)>());
|
UpdateUser(channelId, userId, from, to);
|
||||||
dict[userId] = (from, to);
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if it's different from old settings, update
|
||||||
|
if (user.Source != from || user.Target != to)
|
||||||
|
{
|
||||||
|
user.Source = from;
|
||||||
|
user.Target = to;
|
||||||
|
|
||||||
|
await ctx.SaveChangesAsync();
|
||||||
|
|
||||||
|
UpdateUser(channelId, userId, from, to);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.AutoTranslateUsers.Remove(user);
|
return await UnregisterUser(channelId, userId);
|
||||||
await ctx.SaveChangesAsync();
|
|
||||||
|
|
||||||
if (_users.TryGetValue(channelId, out var inner))
|
|
||||||
inner.TryRemove(userId, out _);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> UnregisterUser(ulong channelId, ulong userId)
|
public async Task<bool> UnregisterUser(ulong channelId, ulong userId)
|
||||||
@@ -216,6 +232,6 @@ namespace NadekoBot.Modules.Searches
|
|||||||
return rows > 0;
|
return rows > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<string> GetLanguages() => _google.Languages;
|
public IEnumerable<string> GetLanguages() => _google.Languages.Select(x => x.Key);
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -70,7 +70,10 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task AutoTransLang(string from, string to)
|
public async Task AutoTransLang(string from, string to)
|
||||||
{
|
{
|
||||||
var succ = await _service.RegisterUserAsync(ctx.User.Id, ctx.Channel.Id, from, to);
|
var succ = await _service.RegisterUserAsync(ctx.User.Id,
|
||||||
|
ctx.Channel.Id,
|
||||||
|
from.ToLower(),
|
||||||
|
to.ToLower());
|
||||||
|
|
||||||
if (succ is null)
|
if (succ is null)
|
||||||
{
|
{
|
||||||
|
@@ -7,7 +7,7 @@ namespace NadekoBot.Services
|
|||||||
{
|
{
|
||||||
public interface IGoogleApiService : INService
|
public interface IGoogleApiService : INService
|
||||||
{
|
{
|
||||||
IEnumerable<string> Languages { get; }
|
IReadOnlyDictionary<string, string> Languages { get; }
|
||||||
|
|
||||||
Task<IEnumerable<string>> GetVideoLinksByKeywordAsync(string keywords, int count = 1);
|
Task<IEnumerable<string>> GetVideoLinksByKeywordAsync(string keywords, int count = 1);
|
||||||
Task<IEnumerable<(string Name, string Id, string Url)>> GetVideoInfosByKeywordAsync(string keywords, int count = 1);
|
Task<IEnumerable<(string Name, string Id, string Url)>> GetVideoInfosByKeywordAsync(string keywords, int count = 1);
|
||||||
|
@@ -226,8 +226,7 @@ namespace NadekoBot.Services
|
|||||||
return new ImageResult(search.Items[0].Image, search.Items[0].Link);
|
return new ImageResult(search.Items[0].Image, search.Items[0].Link);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<string> Languages => _languageDictionary.Keys.OrderBy(x => x);
|
public IReadOnlyDictionary<string, string> Languages { get; } = new Dictionary<string, string>() {
|
||||||
private readonly Dictionary<string, string> _languageDictionary = new Dictionary<string, string>() {
|
|
||||||
{ "afrikaans", "af"},
|
{ "afrikaans", "af"},
|
||||||
{ "albanian", "sq"},
|
{ "albanian", "sq"},
|
||||||
{ "arabic", "ar"},
|
{ "arabic", "ar"},
|
||||||
@@ -365,8 +364,8 @@ namespace NadekoBot.Services
|
|||||||
await Task.Yield();
|
await Task.Yield();
|
||||||
string text;
|
string text;
|
||||||
|
|
||||||
if (!_languageDictionary.ContainsKey(sourceLanguage) ||
|
if (!Languages.ContainsKey(sourceLanguage) ||
|
||||||
!_languageDictionary.ContainsKey(targetLanguage))
|
!Languages.ContainsKey(targetLanguage))
|
||||||
throw new ArgumentException(nameof(sourceLanguage) + "/" + nameof(targetLanguage));
|
throw new ArgumentException(nameof(sourceLanguage) + "/" + nameof(targetLanguage));
|
||||||
|
|
||||||
|
|
||||||
@@ -385,7 +384,7 @@ namespace NadekoBot.Services
|
|||||||
|
|
||||||
private string ConvertToLanguageCode(string language)
|
private string ConvertToLanguageCode(string language)
|
||||||
{
|
{
|
||||||
_languageDictionary.TryGetValue(language, out var mode);
|
Languages.TryGetValue(language, out var mode);
|
||||||
return mode;
|
return mode;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -450,7 +450,7 @@
|
|||||||
"atl_set": "Your auto-translate language has been set to {0}>{1}",
|
"atl_set": "Your auto-translate language has been set to {0}>{1}",
|
||||||
"atl_started": "Started automatic translation of messages on this channel.",
|
"atl_started": "Started automatic translation of messages on this channel.",
|
||||||
"atl_stopped": "Stopped automatic translation of messages on this channel.",
|
"atl_stopped": "Stopped automatic translation of messages on this channel.",
|
||||||
"atl_not_enabled": "Automatic translation is not enabled on this channel.",
|
"atl_not_enabled": "Automatic translation is not enabled on this channel or you've provided an invalid language.",
|
||||||
"bad_input_format": "Bad input format, or something went wrong.",
|
"bad_input_format": "Bad input format, or something went wrong.",
|
||||||
"card_not_found": "Couldn't find that card.",
|
"card_not_found": "Couldn't find that card.",
|
||||||
"catfact": "fact",
|
"catfact": "fact",
|
||||||
|
Reference in New Issue
Block a user