Good job!
I will give you a guide on how to do it in a vote.
Mod n!tmod 2.3*
We add a button to the ingame_vote_misc command:
	Code:
	BUTTONEXT( 75, 338, .5*(WINDOW_WIDTH-18), 14, "OMNIBOT SKILL SETTINGS", .24, 11, close ingame_vote_misc ; open omnibot_skill )
 Then add a line to menus.txt
	Code:
	loadMenu { "ui/omnibot_skill.menu" }
 Then create a menu script:
omnibot_skill.menu
	Code:
	#include "ui/menudef.h"
#define WINDOW_X		16
#define WINDOW_Y		16
#define WINDOW_WIDTH	296
#define WINDOW_HEIGHT	210
#define GROUP_NAME		"omnibot_skill"
#include "ui/menumacros.h"
menuDef {
	name		"omnibot_skill"
	visible		0
	fullscreen	0
	rect		WINDOW_X WINDOW_Y WINDOW_WIDTH WINDOW_HEIGHT
	style		WINDOW_STYLE_FILLED
	onOpen {
		copyCvar g_gametype ui_voteGameType ;
		conditionalScript ui_voteGameType 3	// 3: cvartest
			( "setcvar ui_voteGameType 2" )
			( "clearFocus" ) "4" ;
	}
	onEsc {
		close omnibot_skill ;
		open ingame_vote
	}
// Animated menu by mAzak
// Polska vodka n!tmod
// (C) 2017-2018
//	itemDef {
//		name		"Tlo"
//		group		GROUP_NAME
//		rect		0 0 296 210
//		background	"ui/assets/bord.tga"
//		style		WINDOW_STYLE_SHADER
//		visible		1
//		decoration
//	}
//itemDef {
//		name		"glosowanie"
//		rect		87 0 120 35
//		style		WINDOW_STYLE_SHADER
//		background	"menu/glosowanie.tga"
//		forecolor	1 1 1 1
//		visible		1
//		decoration
//		}
//
// DESCRIPTION OMNIBOT SETTING
		BUTTONEXT( 6, 32, WINDOW_WIDTH-12, -1, "^qUSTAWIENIA SKILLA OMNIBOTOW^P:", .24, 11,  )
		BUTTONEXT( 6, 44, WINDOW_WIDTH-12, -1, "^XDzieki ponizszym ustawieniom botow mozemy regulowac", .24, 11,  )
		BUTTONEXT( 6, 56, WINDOW_WIDTH-12, -1, "^Xich poziom umiejetjetnosci za pomoca ponizszych guzikow", .24, 11,  )
		BUTTONEXT( 6, 68, WINDOW_WIDTH-12, -1, "^XWybierz jedno z ponizszych ustawien aby zaglosowac", .24, 11,  )
		
		BUTTONEXT( 75, 86, .5*(WINDOW_WIDTH-18), 14, "LEVEL EASY", .24, 11, exec "cmd callvote easy"; exec "exec muza_stop.cfg"; exec "exec vote.cfg"; uiScript closeingame )
		BUTTONEXT( 75, 104, .5*(WINDOW_WIDTH-18), 14, "LEVEL MEDIUM", .24, 11, exec "cmd callvote medium"; exec "exec muza_stop.cfg"; exec "exec vote.cfg"; uiScript closeingame )
		BUTTONEXT( 75, 122, .5*(WINDOW_WIDTH-18), 14, "LEVEL HARD", .24, 11, exec "cmd callvote hard"; exec "exec muza_stop.cfg"; exec "exec vote.cfg"; uiScript closeingame )
		BUTTONEXT( 75, 140, .5*(WINDOW_WIDTH-18), 14, "RANDOM", .24, 11, exec "cmd callvote random"; exec "exec muza_stop.cfg"; exec "exec vote.cfg"; uiScript closeingame )
		BUTTONEXT( 6, 158, WINDOW_WIDTH-12, -1, "^sUwaga^q! ^sGlosowanie jest wazne jedna mape", .24, 11,  )
	
	BUTTON( 6, WINDOW_HEIGHT-24, WINDOW_WIDTH-12, 18, "BACK", .3, 14, close omnibot_skill ; open ingame_vote_misc )
}
 We go to vote.db:
vote.db
	Code:
	**********
name = easy
message = ^sSet the botow level to EASY?
help = Vote for the level of bots EASY
exec = bot difficulty 2; bot moveskill 2
passtext = ^SOMNIBOT EASY
levels = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
**********
name = medium
message = ^sSet the botow level on a MEDIUM?
help = Vote for the level of bots MEDIUM
exec = bot difficulty 3; bot moveskill 3
passtext = ^SP^SOMNIBOT MEDIUM
levels = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
**********
name = hard
message = ^sSet the botow level on a HARD?
help = Vote for the level of bots HARD
exec = bot difficulty 6; bot moveskill 4
passtext = ^S^SOMNIBOT HARD
levels = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
**********
name = random
message = ^sSet the botow level on a RANDOM?
help = Vote for the level of bots RANDOM
exec = bot difficulty 6; bot moveskill 3
passtext = ^S^SOMNIBOT RANDOM
levels = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
 Finished. 
Other mod: silEnT 0.8.2, ETPub, NQ
lua scripts:
customvote.lua
	Code:
			vote_allow_omnibot_easy		= 1		
		vote_allow_omnibot_medium	= 1
		vote_allow_omnibot_hard		= 1
		vote_allow_omnibot_random	= 1		
			
			
description = "Custom omnibots"
function et_InitGame( levelTime, randomSeed, restart)
         local modname = string.format("%s", description)
    	et.G_Print(string.format("%s loaded\n", modname))
   	et.RegisterModname( modname)
	
	sv_maxclients = et.trap_Cvar_Get("sv_maxclients")
		num0 = math.floor(sv_maxclients * 0.25)
		num1 = math.floor(sv_maxclients * 0.5) 
	if vote_allow_omnibot_easy == 1 then
		et.trap_SendConsoleCommand( et.EXEC_APPEND, "sv_cvar vote_allow_omnibot_easy EQ 1;")
	else et.trap_SendConsoleCommand( et.EXEC_APPEND, "sv_cvar vote_allow_omnibot_easy 0;")
	end
	
	if vote_allow_omnibot_medium == 1 then
		et.trap_SendConsoleCommand( et.EXEC_APPEND, "sv_cvar vote_omnibot_medium EQ 1;")
	else et.trap_SendConsoleCommand( et.EXEC_APPEND, "sv_cvar vote_allow_omnibot_medium EQ 0;")
	end
	if vote_allow_omnibot_hard == 1 then
		et.trap_SendConsoleCommand( et.EXEC_APPEND, "sv_cvar vote_omnibot_hard EQ 1;")
	else et.trap_SendConsoleCommand( et.EXEC_APPEND, "sv_cvar vote_allow_omnibot_hard EQ 0;")
	end
	if vote_allow_omnibot_random == 1 then
		et.trap_SendConsoleCommand( et.EXEC_APPEND, "sv_cvar vote_allow_omnibot_random EQ 1;")
	else et.trap_SendConsoleCommand( et.EXEC_APPEND, "sv_cvar vote_allow_omnibot_random EQ 0;")
	end
end
function et_ClientCommand( clientNum, command)
	command = command:lower()
	if et.trap_Argv(0) == "votes" then
		et.trap_SendServerCommand( clientNum, "print \"\n")
		et.trap_SendServerCommand( clientNum, "print \"^7Custom ^3callvote ^7commands are:\n")
		et.trap_SendServerCommand( clientNum, "print \"^3-----------------------------\n")
	if vote_allow_omnibot_easy == 1 then
		et.trap_SendServerCommand( clientNum, "print \"^5Vote for the level of bots EASY\n")
       	end
	
	if vote_allow_omnibot_medium == 1 then
		et.trap_SendServerCommand( clientNum, "print \"^5Vote for the level of bots MEDIUM\n")
        	end
	if vote_allow_omnibot_hard == 1 then
		et.trap_SendServerCommand( clientNum, "print \"^5Vote for the level of bots HARD\n")
	end
	if vote_allow_omnibot_random == 1 then
		et.trap_SendServerCommand( clientNum, "print \"^5Vote for the level of bots RANDOM\n")
        	end
		et.trap_SendServerCommand( clientNum, "print \"\n")
		et.trap_SendServerCommand( clientNum, "print \"^7Usage: ^3\\callvote poll <command>\n")
        		et.trap_SendServerCommand( clientNum, "print \"\n")
		return 1
	end
end
function et_Print( text)
	
	if string.sub(text,1,19) == "Vote Passed: [poll]" then
		if string.format(text) == "Vote Passed: [poll] easy\n" then
			if vote_allow_omnibot_easy == 1 then
				et.trap_SendConsoleCommand( et.EXEC_APPEND, "bot difficulty 2; bot moveskill 2")
		end
		return	
		elseif string.format(text) == "Vote Passed: [poll] medium\n" then
			if vote_allow_omnibot_medium == 1 then
				et.trap_Cvar_Set( bot difficulty 3; bot moveskill 3)
		end
		return
		elseif string.format(text) == "Vote Passed: [poll] hard\n" then
			if vote_allow_omnibot_hard == 1 then
				et.trap_Cvar_Set( "bot difficulty 6; bot moveskill 4)
		end
		return	
		elseif string.format(text) == "Vote Passed: [poll] random\n" then
			if vote_allow_random == 1 then
				et.trap_SendConsoleCommand( et.EXEC_APPEND, "bot difficulty 6; bot moveskill 3")
		end
		return
		end
       	 end
end
 Add to mod.cfg
	Code:
	set lua_modules  "customvote.lua"
 Then add a line to menus.txt
	Code:
	loadMenu { "ui/omnibot_skill.menu" }
 We create a menu script:
omnibot_skill.menu
	Code:
	#include "ui/menudef.h"
// Defines //
#define WINDOW_X 16
#define WINDOW_Y 16
//#define WINDOW_WIDTH	128
#define WINDOW_WIDTH	252
#define WINDOW_HEIGHT	200
#define GROUP_NAME "grpCustomMain"
// Macros //
#include "ui/menumacros.h"
// Misc Vote Menu //
menuDef {
name "omnibot_skill"
visible 0
fullscreen	0
rect WINDOW_X WINDOW_Y WINDOW_WIDTH WINDOW_HEIGHT
style WINDOW_STYLE_FILLED
onOpen {
conditionalScript vote_allow_omnibot_easy 0 
( "show bttn_easy" )	
( "hide bttn_easy" ) 
conditionalScript vote_allow_omnibot_medium 0 
( "show bttn_medium" )	
( "hide bttn_medium" ) 
conditionalScript vote_allow_omnibot_hard 0 
( "show bttn_hard" )	
( "hide bttn_hard" ) 
conditionalScript vote_allow_omnibot_random 0 
( "show bttn_random" )	
( "hide bttn_random" ) 
}
onEsc {
close omnibot_skill ;
open ingame_main ;
open custom_main
}
// Window //
WINDOW( "^xVOTE", 50)
// Buttons //
// left side
NAMEDBUTTON( "bttn_easy", 6, 50, .5*(WINDOW_WIDTH-18), 14, "^SBOTS EASY", .24, 11, exec "callvote poll easy"; uiScript closeingame )
NAMEDBUTTON( "bttn_hard", 6, 32, .5*(WINDOW_WIDTH-18), 14, "^SBOTS HARD", .24, 11, exec "callvote poll hard"; uiScript closeingame )
// right side
NAMEDBUTTON( "bttn_medium", 6+.5*(WINDOW_WIDTH-18)+6, 50, .5*(WINDOW_WIDTH-18), 14, "^SBOTS MEDIUM", .24, 11, exec "callvote poll medium"; uiScript closeingame )
NAMEDBUTTON( "bttn_random", 6+.5*(WINDOW_WIDTH-18)+6, 32, .5*(WINDOW_WIDTH-18), 14, "^SBOTS RANDOM", .24, 11, exec "callvote poll random"; uiScript closeingame )
BUTTON( 6, WINDOW_HEIGHT-24, WINDOW_WIDTH-12, 18, "BACK", .3, 14, close omnibot_skill ; open ingame_main ; open custom_main )
}
 Silent 0.9.0:
We create a menu script:
custom_main.menu
	Code:
	#include "ui/menudef.h"
// Defines //
#define WINDOW_X 16
#define WINDOW_Y 214 // 16
//#define WINDOW_WIDTH 150
#define WINDOW_WIDTH 160
//#define WINDOW_HEIGHT 196
#define WINDOW_HEIGHT 175 // 248
#define GROUP_NAME "grpCustomMain"
// Macros //
#include "ui/menumacros.h"
// Main Menu //
menuDef {
name "Custom_Main"
visible 0
fullscreen 0
rect WINDOW_X WINDOW_Y WINDOW_WIDTH WINDOW_HEIGHT
style WINDOW_STYLE_FILLED
onOpen {
//ydnar
conditionalscript ROldModeCheck 2
( "clearFocus ; open vid_confirm ")
( "clearFocus" )
}
onEsc {
close ingame_main ;
close custom_main 
}
// Window //
WINDOW( "^WMAIN II", 50)
// Buttons //
BUTTON( 6, 32, WINDOW_WIDTH-12, 18, "CUSTOM VOTE", .3, 14, close custom_main ; open omnibot_skill  )
}
 Then add a line to menus_server_custom.txt
	Code:
	{
	loadMenu { "ui/custom_main.menu" } 
	loadMenu { "ui/omnibot_skill.menu" }
}
 Add to silent.cfg
	Code:
	set lua_modules  "customvote.lua"