Merge branch 'dev' into staging
This commit is contained in:
commit
e645b2fabd
24
Bot/Admin.fs
Normal file
24
Bot/Admin.fs
Normal file
@ -0,0 +1,24 @@
|
||||
module Degenz.Admin
|
||||
|
||||
open System.Threading.Tasks
|
||||
open DSharpPlus.Entities
|
||||
open DSharpPlus.SlashCommands
|
||||
open Degenz.Messaging
|
||||
|
||||
type AdminBot() =
|
||||
inherit ApplicationCommandModule ()
|
||||
|
||||
let enforceAdmin (ctx : IDiscordContext) (adminFn : IDiscordContext -> Task) =
|
||||
let isAdmin = Seq.exists (fun (role : DiscordRole) -> role.Id = GuildEnvironment.roleAdmin) (ctx.GetDiscordMember().Roles)
|
||||
if isAdmin then
|
||||
adminFn ctx
|
||||
else
|
||||
Messaging.sendSimpleResponse ctx $"You are not admin" |> Async.StartAsTask :> Task
|
||||
|
||||
[<SlashCommand("admin-invites", "Get total invites from a specific user")>]
|
||||
member this.GetAttributions (ctx : InteractionContext, [<Option("player", "The player you want to check")>] user : DiscordUser) =
|
||||
enforceAdmin (DiscordInteractionContext ctx) (InviteTracker.getAttributions user.Id)
|
||||
|
||||
[<SlashCommand("admin-whitelist-stock", "Set whitelist stock")>]
|
||||
member this.SetStock (ctx : InteractionContext, [<Option("amount", "Set the amount of WL available for purchase")>] amount : int64) =
|
||||
enforceAdmin (DiscordInteractionContext ctx) (InviteTracker.setWhitelistStock (int amount))
|
@ -16,6 +16,7 @@ let hackerBattleConfig = DiscordConfiguration()
|
||||
let storeConfig = DiscordConfiguration()
|
||||
let stealConfig = DiscordConfiguration()
|
||||
let inviterConfig = DiscordConfiguration()
|
||||
let adminConfig = DiscordConfiguration()
|
||||
//let slotMachineConfig = DiscordConfiguration()
|
||||
//hackerBattleConfig.MinimumLogLevel <- Microsoft.Extensions.Logging.LogLevel.Trace
|
||||
//storeConfig.MinimumLogLevel <- Microsoft.Extensions.Logging.LogLevel.Trace
|
||||
@ -32,16 +33,21 @@ stealConfig.Intents <- DiscordIntents.All
|
||||
inviterConfig.TokenType <- TokenType.Bot
|
||||
inviterConfig.Intents <- DiscordIntents.All
|
||||
|
||||
adminConfig.TokenType <- TokenType.Bot
|
||||
adminConfig.Intents <- DiscordIntents.All
|
||||
|
||||
hackerBattleConfig.Token <- GuildEnvironment.tokenHackerBattle
|
||||
storeConfig.Token <- GuildEnvironment.tokenStore
|
||||
stealConfig.Token <- GuildEnvironment.tokenSteal
|
||||
inviterConfig.Token <- GuildEnvironment.tokenInviter
|
||||
adminConfig.Token <- GuildEnvironment.tokenAdmin
|
||||
//slotMachineConfig.Token <- Environment.GetEnvironmentVariable("BOT_SLOT_MACHINE")
|
||||
|
||||
let hackerBattleBot = new DiscordClient(hackerBattleConfig)
|
||||
let storeBot = new DiscordClient(storeConfig)
|
||||
let stealBot = new DiscordClient(stealConfig)
|
||||
let inviterBot = new DiscordClient(inviterConfig)
|
||||
let adminBot = new DiscordClient(adminConfig)
|
||||
//let slotMachineBot = new DiscordClient(slotMachineConfig)
|
||||
|
||||
//let clients = [| hackerBattleBot ; storeBot ; slotMachineBot |]
|
||||
@ -49,12 +55,14 @@ let hackerCommands = hackerBattleBot.UseSlashCommands()
|
||||
let storeCommands = storeBot.UseSlashCommands()
|
||||
let stealCommands = stealBot.UseSlashCommands()
|
||||
let inviterCommands = inviterBot.UseSlashCommands()
|
||||
let adminCommands = adminBot.UseSlashCommands()
|
||||
//let sc3 = slotMachineBot.UseSlashCommands()
|
||||
|
||||
hackerCommands.RegisterCommands<HackerBattle.HackerGame>(guild);
|
||||
storeCommands.RegisterCommands<Store.Store>(guild);
|
||||
stealCommands.RegisterCommands<Thief.StealGame>(guild);
|
||||
inviterCommands.RegisterCommands<InviteTracker.Inviter>(guild);
|
||||
adminCommands.RegisterCommands<Admin.AdminBot>(guild);
|
||||
//hackerCommands.RegisterCommands<RPSGame>(guild);
|
||||
//sc3.RegisterCommands<SlotMachine>(guild);
|
||||
|
||||
@ -95,6 +103,7 @@ GuildEnvironment.botUserArmory <- Some storeBot.CurrentUser
|
||||
inviterBot.ConnectAsync() |> Async.AwaitTask |> Async.RunSynchronously
|
||||
GuildEnvironment.botClientRecruit <- Some inviterBot
|
||||
|
||||
adminBot.ConnectAsync() |> Async.AwaitTask |> Async.RunSynchronously
|
||||
//stealBot.ConnectAsync() |> Async.AwaitTask |> Async.RunSynchronously
|
||||
|
||||
let rec loop areBotsRunning =
|
||||
|
@ -28,6 +28,7 @@
|
||||
<Compile Include="Games\Store.fs" />
|
||||
<Compile Include="Games\Trainer.fs" />
|
||||
<Compile Include="Games\HackerBattle.fs" />
|
||||
<Compile Include="Admin.fs" />
|
||||
<Compile Include="Bot.fs" />
|
||||
</ItemGroup>
|
||||
<Import Project="..\.paket\Paket.Restore.targets" />
|
||||
|
@ -259,3 +259,18 @@ let updateWhitelistStock () = async {
|
||||
return true
|
||||
with _ -> return false
|
||||
}
|
||||
|
||||
let setWhitelistStock amount = async {
|
||||
try
|
||||
do! connStr
|
||||
|> Sql.connect
|
||||
|> Sql.parameters [ ( "amount" , Sql.int amount ) ]
|
||||
|> Sql.query """
|
||||
UPDATE item SET stock = @amount WHERE symbol = 'WHITELIST'
|
||||
"""
|
||||
|> Sql.executeNonQueryAsync
|
||||
|> Async.AwaitTask
|
||||
|> Async.Ignore
|
||||
return true
|
||||
with _ -> return false
|
||||
}
|
||||
|
@ -22,6 +22,7 @@ let tokenSteal = getVar "TOKEN_STEAL"
|
||||
let tokenHackerBattle = getVar "TOKEN_HACKER_BATTLE"
|
||||
let tokenStore = getVar "TOKEN_STORE"
|
||||
let tokenInviter = getVar "TOKEN_INVITER"
|
||||
let tokenAdmin = getVar "TOKEN_ADMINBOT"
|
||||
let tokenMixpanel = getVar "TOKEN_MIXPANEL"
|
||||
let channelEventsHackerBattle = getId "CHANNEL_EVENTS_HACKER_BATTLE"
|
||||
let channelTraining = getId "CHANNEL_TRAINING"
|
||||
@ -44,6 +45,7 @@ let roleTrainee = getId "ROLE_TRAINEE"
|
||||
let roleHacker = getId "ROLE_HACKER"
|
||||
let rolePrisoner = getId "ROLE_PRISONER"
|
||||
let roleWhitelist = getId "ROLE_WHITELIST"
|
||||
let roleAdmin = getId "ROLE_ADMIN"
|
||||
|
||||
let mutable botUserHackerBattle : DiscordUser option = None
|
||||
let mutable botUserArmory : DiscordUser option = None
|
||||
|
@ -232,14 +232,15 @@ let private listServerInvites (ctx : IDiscordContext) = task {
|
||||
do! ctx.Respond(InteractionResponseType.ChannelMessageWithSource, msg)
|
||||
}
|
||||
|
||||
let private getAttributions (ctx : IDiscordContext) userId = task {
|
||||
let! total = getInviteAttributions(userId)
|
||||
let msg =
|
||||
DiscordInteractionResponseBuilder()
|
||||
.AsEphemeral(true)
|
||||
.WithContent($"<@{userId}> has invited {total} people")
|
||||
do! ctx.Respond(InteractionResponseType.ChannelMessageWithSource, msg)
|
||||
}
|
||||
let getAttributions userId (ctx : IDiscordContext) =
|
||||
task {
|
||||
let! total = getInviteAttributions(userId)
|
||||
let msg =
|
||||
DiscordInteractionResponseBuilder()
|
||||
.AsEphemeral(true)
|
||||
.WithContent($"<@{userId}> has invited {total} people")
|
||||
do! ctx.Respond(InteractionResponseType.ChannelMessageWithSource, msg)
|
||||
} :> Task
|
||||
|
||||
let private getInvitedUsersForId (ctx : IDiscordContext) = task {
|
||||
let! users = getInvitedUsers (ctx.GetDiscordMember().Id)
|
||||
@ -581,6 +582,16 @@ let handleGuildMemberAdded _ (eventArgs : GuildMemberAddEventArgs) =
|
||||
do! processNewUser eventArgs
|
||||
} :> Task
|
||||
|
||||
let rec setWhitelistStock amount (ctx : IDiscordContext) =
|
||||
task {
|
||||
do! Messaging.defer ctx
|
||||
let! result = DbService.setWhitelistStock amount
|
||||
if result then
|
||||
do! Messaging.sendFollowUpMessage ctx $"Set Whitelist stock to {amount}"
|
||||
else
|
||||
do! Messaging.sendFollowUpMessage ctx $"Error setting WL to {amount}, make sure it's greater than 0"
|
||||
} :> Task
|
||||
|
||||
type Inviter() =
|
||||
inherit ApplicationCommandModule ()
|
||||
|
||||
@ -596,10 +607,6 @@ type Inviter() =
|
||||
member this.ListServerInvites (ctx : InteractionContext) =
|
||||
listServerInvites (DiscordInteractionContext ctx)
|
||||
|
||||
// [<SlashCommand("invites-attributions", "Get total invites from a specific user")>]
|
||||
member this.getAttributions (ctx : InteractionContext, [<Option("player", "The player you want to check")>] user : DiscordUser) =
|
||||
getAttributions (DiscordInteractionContext ctx) user.Id
|
||||
|
||||
// [<SlashCommand("invites-clear", "Get total invites from a specific user")>]
|
||||
member this.ClearInvites (ctx : InteractionContext) =
|
||||
clearInvites (DiscordInteractionContext ctx)
|
||||
|
Loading…
x
Reference in New Issue
Block a user