Admin bot with two admin commands
This commit is contained in:
		
							parent
							
								
									0853463120
								
							
						
					
					
						commit
						5069591eab
					
				
							
								
								
									
										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 storeConfig = DiscordConfiguration()
 | 
				
			||||||
let stealConfig = DiscordConfiguration()
 | 
					let stealConfig = DiscordConfiguration()
 | 
				
			||||||
let inviterConfig = DiscordConfiguration()
 | 
					let inviterConfig = DiscordConfiguration()
 | 
				
			||||||
 | 
					let adminConfig = DiscordConfiguration()
 | 
				
			||||||
//let slotMachineConfig = DiscordConfiguration()
 | 
					//let slotMachineConfig = DiscordConfiguration()
 | 
				
			||||||
//hackerBattleConfig.MinimumLogLevel <- Microsoft.Extensions.Logging.LogLevel.Trace
 | 
					//hackerBattleConfig.MinimumLogLevel <- Microsoft.Extensions.Logging.LogLevel.Trace
 | 
				
			||||||
//storeConfig.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.TokenType <- TokenType.Bot
 | 
				
			||||||
inviterConfig.Intents <- DiscordIntents.All
 | 
					inviterConfig.Intents <- DiscordIntents.All
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					adminConfig.TokenType <- TokenType.Bot
 | 
				
			||||||
 | 
					adminConfig.Intents <- DiscordIntents.All
 | 
				
			||||||
 | 
					
 | 
				
			||||||
hackerBattleConfig.Token <- GuildEnvironment.tokenHackerBattle
 | 
					hackerBattleConfig.Token <- GuildEnvironment.tokenHackerBattle
 | 
				
			||||||
storeConfig.Token <- GuildEnvironment.tokenStore
 | 
					storeConfig.Token <- GuildEnvironment.tokenStore
 | 
				
			||||||
stealConfig.Token <- GuildEnvironment.tokenSteal
 | 
					stealConfig.Token <- GuildEnvironment.tokenSteal
 | 
				
			||||||
inviterConfig.Token <- GuildEnvironment.tokenInviter
 | 
					inviterConfig.Token <- GuildEnvironment.tokenInviter
 | 
				
			||||||
 | 
					adminConfig.Token <- GuildEnvironment.tokenAdmin
 | 
				
			||||||
//slotMachineConfig.Token <- Environment.GetEnvironmentVariable("BOT_SLOT_MACHINE")
 | 
					//slotMachineConfig.Token <- Environment.GetEnvironmentVariable("BOT_SLOT_MACHINE")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let hackerBattleBot = new DiscordClient(hackerBattleConfig)
 | 
					let hackerBattleBot = new DiscordClient(hackerBattleConfig)
 | 
				
			||||||
let storeBot = new DiscordClient(storeConfig)
 | 
					let storeBot = new DiscordClient(storeConfig)
 | 
				
			||||||
let stealBot = new DiscordClient(stealConfig)
 | 
					let stealBot = new DiscordClient(stealConfig)
 | 
				
			||||||
let inviterBot = new DiscordClient(inviterConfig)
 | 
					let inviterBot = new DiscordClient(inviterConfig)
 | 
				
			||||||
 | 
					let adminBot = new DiscordClient(adminConfig)
 | 
				
			||||||
//let slotMachineBot = new DiscordClient(slotMachineConfig)
 | 
					//let slotMachineBot = new DiscordClient(slotMachineConfig)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//let clients = [| hackerBattleBot ; storeBot ; slotMachineBot |]
 | 
					//let clients = [| hackerBattleBot ; storeBot ; slotMachineBot |]
 | 
				
			||||||
@ -49,12 +55,14 @@ let hackerCommands = hackerBattleBot.UseSlashCommands()
 | 
				
			|||||||
let storeCommands = storeBot.UseSlashCommands()
 | 
					let storeCommands = storeBot.UseSlashCommands()
 | 
				
			||||||
let stealCommands = stealBot.UseSlashCommands()
 | 
					let stealCommands = stealBot.UseSlashCommands()
 | 
				
			||||||
let inviterCommands = inviterBot.UseSlashCommands()
 | 
					let inviterCommands = inviterBot.UseSlashCommands()
 | 
				
			||||||
 | 
					let adminCommands = adminBot.UseSlashCommands()
 | 
				
			||||||
//let sc3 = slotMachineBot.UseSlashCommands()
 | 
					//let sc3 = slotMachineBot.UseSlashCommands()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
hackerCommands.RegisterCommands<HackerBattle.HackerGame>(guild);
 | 
					hackerCommands.RegisterCommands<HackerBattle.HackerGame>(guild);
 | 
				
			||||||
storeCommands.RegisterCommands<Store.Store>(guild);
 | 
					storeCommands.RegisterCommands<Store.Store>(guild);
 | 
				
			||||||
stealCommands.RegisterCommands<Thief.StealGame>(guild);
 | 
					stealCommands.RegisterCommands<Thief.StealGame>(guild);
 | 
				
			||||||
inviterCommands.RegisterCommands<InviteTracker.Inviter>(guild);
 | 
					inviterCommands.RegisterCommands<InviteTracker.Inviter>(guild);
 | 
				
			||||||
 | 
					adminCommands.RegisterCommands<Admin.AdminBot>(guild);
 | 
				
			||||||
//hackerCommands.RegisterCommands<RPSGame>(guild);
 | 
					//hackerCommands.RegisterCommands<RPSGame>(guild);
 | 
				
			||||||
//sc3.RegisterCommands<SlotMachine>(guild);
 | 
					//sc3.RegisterCommands<SlotMachine>(guild);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -95,6 +103,7 @@ GuildEnvironment.botUserArmory <- Some storeBot.CurrentUser
 | 
				
			|||||||
inviterBot.ConnectAsync() |> Async.AwaitTask |> Async.RunSynchronously
 | 
					inviterBot.ConnectAsync() |> Async.AwaitTask |> Async.RunSynchronously
 | 
				
			||||||
GuildEnvironment.botClientRecruit <- Some inviterBot
 | 
					GuildEnvironment.botClientRecruit <- Some inviterBot
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					adminBot.ConnectAsync() |> Async.AwaitTask |> Async.RunSynchronously
 | 
				
			||||||
//stealBot.ConnectAsync() |> Async.AwaitTask |> Async.RunSynchronously
 | 
					//stealBot.ConnectAsync() |> Async.AwaitTask |> Async.RunSynchronously
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let rec loop areBotsRunning =
 | 
					let rec loop areBotsRunning =
 | 
				
			||||||
 | 
				
			|||||||
@ -28,6 +28,7 @@
 | 
				
			|||||||
        <Compile Include="Games\Store.fs" />
 | 
					        <Compile Include="Games\Store.fs" />
 | 
				
			||||||
        <Compile Include="Games\Trainer.fs" />
 | 
					        <Compile Include="Games\Trainer.fs" />
 | 
				
			||||||
        <Compile Include="Games\HackerBattle.fs" />
 | 
					        <Compile Include="Games\HackerBattle.fs" />
 | 
				
			||||||
 | 
					        <Compile Include="Admin.fs" />
 | 
				
			||||||
        <Compile Include="Bot.fs" />
 | 
					        <Compile Include="Bot.fs" />
 | 
				
			||||||
    </ItemGroup>
 | 
					    </ItemGroup>
 | 
				
			||||||
    <Import Project="..\.paket\Paket.Restore.targets" />
 | 
					    <Import Project="..\.paket\Paket.Restore.targets" />
 | 
				
			||||||
 | 
				
			|||||||
@ -259,3 +259,18 @@ let updateWhitelistStock () = async {
 | 
				
			|||||||
    return true
 | 
					    return true
 | 
				
			||||||
    with _ -> return false
 | 
					    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 tokenHackerBattle = getVar "TOKEN_HACKER_BATTLE"
 | 
				
			||||||
let tokenStore = getVar "TOKEN_STORE"
 | 
					let tokenStore = getVar "TOKEN_STORE"
 | 
				
			||||||
let tokenInviter = getVar "TOKEN_INVITER"
 | 
					let tokenInviter = getVar "TOKEN_INVITER"
 | 
				
			||||||
 | 
					let tokenAdmin = getVar "TOKEN_ADMINBOT"
 | 
				
			||||||
let tokenMixpanel = getVar "TOKEN_MIXPANEL"
 | 
					let tokenMixpanel = getVar "TOKEN_MIXPANEL"
 | 
				
			||||||
let channelEventsHackerBattle = getId "CHANNEL_EVENTS_HACKER_BATTLE"
 | 
					let channelEventsHackerBattle = getId "CHANNEL_EVENTS_HACKER_BATTLE"
 | 
				
			||||||
let channelTraining = getId "CHANNEL_TRAINING"
 | 
					let channelTraining = getId "CHANNEL_TRAINING"
 | 
				
			||||||
@ -44,6 +45,7 @@ let roleTrainee = getId "ROLE_TRAINEE"
 | 
				
			|||||||
let roleHacker = getId "ROLE_HACKER"
 | 
					let roleHacker = getId "ROLE_HACKER"
 | 
				
			||||||
let rolePrisoner = getId "ROLE_PRISONER"
 | 
					let rolePrisoner = getId "ROLE_PRISONER"
 | 
				
			||||||
let roleWhitelist = getId "ROLE_WHITELIST"
 | 
					let roleWhitelist = getId "ROLE_WHITELIST"
 | 
				
			||||||
 | 
					let roleAdmin = getId "ROLE_ADMIN"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let mutable botUserHackerBattle : DiscordUser option = None
 | 
					let mutable botUserHackerBattle : DiscordUser option = None
 | 
				
			||||||
let mutable botUserArmory : 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)
 | 
					    do! ctx.Respond(InteractionResponseType.ChannelMessageWithSource, msg)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let private getAttributions (ctx : IDiscordContext) userId = task {
 | 
					let getAttributions userId (ctx : IDiscordContext) =
 | 
				
			||||||
 | 
					    task {
 | 
				
			||||||
        let! total = getInviteAttributions(userId)
 | 
					        let! total = getInviteAttributions(userId)
 | 
				
			||||||
        let msg =
 | 
					        let msg =
 | 
				
			||||||
            DiscordInteractionResponseBuilder()
 | 
					            DiscordInteractionResponseBuilder()
 | 
				
			||||||
                .AsEphemeral(true)
 | 
					                .AsEphemeral(true)
 | 
				
			||||||
                .WithContent($"<@{userId}> has invited {total} people")
 | 
					                .WithContent($"<@{userId}> has invited {total} people")
 | 
				
			||||||
        do! ctx.Respond(InteractionResponseType.ChannelMessageWithSource, msg)
 | 
					        do! ctx.Respond(InteractionResponseType.ChannelMessageWithSource, msg)
 | 
				
			||||||
}
 | 
					    } :> Task
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let private getInvitedUsersForId (ctx : IDiscordContext) = task {
 | 
					let private getInvitedUsersForId (ctx : IDiscordContext) = task {
 | 
				
			||||||
    let! users = getInvitedUsers (ctx.GetDiscordMember().Id)
 | 
					    let! users = getInvitedUsers (ctx.GetDiscordMember().Id)
 | 
				
			||||||
@ -581,6 +582,16 @@ let handleGuildMemberAdded _ (eventArgs : GuildMemberAddEventArgs) =
 | 
				
			|||||||
            do! processNewUser eventArgs
 | 
					            do! processNewUser eventArgs
 | 
				
			||||||
    } :> Task
 | 
					    } :> 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() =
 | 
					type Inviter() =
 | 
				
			||||||
    inherit ApplicationCommandModule ()
 | 
					    inherit ApplicationCommandModule ()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -596,10 +607,6 @@ type Inviter() =
 | 
				
			|||||||
    member this.ListServerInvites (ctx : InteractionContext) =
 | 
					    member this.ListServerInvites (ctx : InteractionContext) =
 | 
				
			||||||
        listServerInvites (DiscordInteractionContext ctx)
 | 
					        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")>]
 | 
					//    [<SlashCommand("invites-clear", "Get total invites from a specific user")>]
 | 
				
			||||||
    member this.ClearInvites (ctx : InteractionContext) =
 | 
					    member this.ClearInvites (ctx : InteractionContext) =
 | 
				
			||||||
        clearInvites (DiscordInteractionContext ctx)
 | 
					        clearInvites (DiscordInteractionContext ctx)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user