コード例 #1
0
ファイル: Program.cs プロジェクト: sadenar/DiscordWikiBot
        private Task Client_GuildAvailable(GuildCreateEventArgs e)
        {
            // Log the name of the guild that just became available
            e.Client.DebugLogger.LogMessage(LogLevel.Info, "DiscordWikiBot", $"Guild available: {e.Guild.Name}", DateTime.Now);

            // Load custom values if needed
            string guild = e.Guild.Id.ToString();

            Linking.Init(guild);

            Locale.LoadCustomLocale(Config.GetLang(guild));

            if (Config.GetTWChannel() != null && Config.GetTWLang() != null)
            {
                TranslateWiki.Init(Config.GetTWChannel(guild), Config.GetTWLang(guild));
            }

            if (Config.GetDomain() != "")
            {
                EventStreams.Subscribe(Config.GetDomain(guild));
            }

            return(Task.FromResult(0));
        }
コード例 #2
0
ファイル: Configuring.cs プロジェクト: sadenar/DiscordWikiBot
        public async Task SetDomain(CommandContext ctx,
                                    [Description("configuring-help-domain-value"), RemainingText] string value)
        {
            string prevDomain = Config.GetDomain(ctx.Guild.Id.ToString());
            string lang       = Config.GetLang(ctx.Guild.Id.ToString());

            // List of Wikimedia projects
            string[] wmfProjects =
            {
                ".wikipedia.org",
                ".wiktionary.org",
                ".wikibooks.org",
                ".wikinews.org",
                ".wikiquote.org",
                ".wikisource.org",
                ".wikiversity.org",
                ".wikivoyage.org",
                ".wikimedia.org",
                "www.mediawiki.org",
                "www.wikidata.org"
            };

            // Ensure that we are in private channel
            if (ctx.Channel.Name != "moderators")
            {
                await ctx.RespondAsync(Locale.GetMessage("denied", lang));

                return;
            }
            ;
            await ctx.TriggerTypingAsync();

            // Check for required parameters
            if (value.ToString() == "")
            {
                await ctx.RespondAsync(Locale.GetMessage("configuring-required-value", lang, "help guildDomain", Config.GetValue("prefix")));

                return;
            }

            // Check if matches Wikimedia project
            bool isWmfProject = false;

            if (value != "-" && wmfProjects.Any(value.Contains))
            {
                isWmfProject = true;
            }

            if (!isWmfProject)
            {
                await ctx.RespondAsync(Locale.GetMessage("configuring-badvalue-domain", lang, "`" + string.Join("`, `", wmfProjects) + "`"));

                return;
            }

            // Check for return to default
            if (value == "-")
            {
                value = Config.GetDomain();
            }

            // Do action and respond
            int succeeds = Config.SetOverride(ctx.Guild.Id.ToString(), "domain", value);

            if (succeeds == Config.RESULT_CHANGE)
            {
                EventStreams.Subscribe(value);
                await ctx.RespondAsync(Locale.GetMessage("configuring-changed-domain", lang, value));
            }
            if (succeeds == Config.RESULT_RESET)
            {
                // Unsubscribe if this domain is not being used elsewhere
                if (value != prevDomain && !Config.IsValuePresent("domain", prevDomain))
                {
                    EventStreams.Unsubscribe(value);
                }
            }
            await RespondOnErrors(succeeds, ctx, lang);
        }