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 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) = | ||||||
|     let! total = getInviteAttributions(userId) |     task { | ||||||
|     let msg = |         let! total = getInviteAttributions(userId) | ||||||
|         DiscordInteractionResponseBuilder() |         let msg = | ||||||
|             .AsEphemeral(true) |             DiscordInteractionResponseBuilder() | ||||||
|             .WithContent($"<@{userId}> has invited {total} people") |                 .AsEphemeral(true) | ||||||
|     do! ctx.Respond(InteractionResponseType.ChannelMessageWithSource, msg) |                 .WithContent($"<@{userId}> has invited {total} people") | ||||||
| } |         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