Skip to content

Instantly share code, notes, and snippets.

@moko256
Last active July 20, 2023 22:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save moko256/51593bd51d72c834b98c4e7213e43161 to your computer and use it in GitHub Desktop.
Save moko256/51593bd51d72c834b98c4e7213e43161 to your computer and use it in GitHub Desktop.
AiScript置き場
@num_to_SI_unit_str(x) {
let units_SI = [
""
"k"
"M"
"G"
"T"
"P"
"E"
]
let x_str = x.to_str()
let len_of_x_str = x_str.len
var point_index = x_str.index_of(".")
if (point_index == -1) {
point_index = len_of_x_str
}
if (point_index <= 0) {
return x_str
}
let x_of_log1000 = Math:floor((point_index - 1) / 3)
let next_point_index = point_index - x_of_log1000 * 3
let next_str_decimal = if point_index != len_of_x_str { } else {""}
let unit = units_SI[x_of_log1000]
let turncate_point = next_point_index + Math:max(1, Math:min(3 - next_point_index, 3))
let result_int_part = x_str.slice(0, next_point_index)
let result_dec_part = `{x_str.slice(0,point_index)}{x_str.slice(point_index+1,len_of_x_str)}`.slice(next_point_index, turncate_point)
let point = if result_dec_part.len != 0 { "." } else { "" }
return `{result_int_part}{point}{result_dec_part}{unit}`
}
@retrieve() {
if (USER_ID == null) {
return {
is_error: true
reason: "ログインしてください"
}
}
let server_stats = Mk:api("stats", {})
let user_stats = Mk:api("users/show", { userId: USER_ID })
return {
is_error: false
username: USER_USERNAME
percentage: num_to_SI_unit_str(100 * user_stats.notesCount / server_stats.originalNotesCount)
note_count_user: num_to_SI_unit_str(user_stats.notesCount)
note_count_server: num_to_SI_unit_str(server_stats.originalNotesCount)
}
}
@render(state){
@renderError(state) {
Ui:render([
Ui:C:mfm({ text: state.reason })
])
Mk:dialog(state.reason, "", "error")
}
@renderResult(state) {
let result = `@{state.username} のノートは…このサーバーの **{state.percentage}%** ({state.note_count_user} / {state.note_count_server})です!{Str:lf}#あなたのノートの割合`
Ui:render([
Ui:C:container({
align: 'center'
children: [
Ui:C:mfm({ text: `{result}` })
Ui:C:postFormButton({
text: "投稿する"
rounded: true
primary: true
form: {
text: `{result}{Str:lf}{THIS_URL}`
}
})
]
})
])
}
if (state.is_error) {
renderError(state)
} else {
renderResult(state)
}
}
render(retrieve())
/// @ 0.13.3
// スロット的なやつ
let final_text = ["A", "B", "C"]
let HASHTAG = "#YEAH"
let OPEN_DELAY = 800
var opened = 0
var stopTimer = null
@openUp() {
updateUi(opened)
if (opened == final_text.len) {
stopTimer()
} else {
opened += 1
}
}
@updateUi(opened) {
let display_chars = []
for (let i, final_text.len) {
if (i < opened) {
display_chars.push(final_text[i])
} else {
display_chars.push(`$[blur {final_text[i]}]`)
}
}
let display_text = display_chars.join()
let display_text_framed = `$[x2 {display_text}]{Str:lf}{HASHTAG}`
let display_text_postable = `{display_text_framed}{Str:lf}{THIS_URL}`
let children = [ Ui:C:mfm({ text: display_text_framed }) ]
if (opened == final_text.len) {
children.push(
Ui:C:postFormButton({
text: "投稿する"
rounded: true
primary: true
form: { text: display_text_postable }
})
)
}
Ui:render([Ui:C:container({align: 'center', children: children})])
}
stopTimer = Async:interval(OPEN_DELAY, openUp, false)
updateUi(0)
/// @ 0.13.3
// ユーザーごとに日替わりのおみくじのプリセットを元に改造
@choose(random, choices) {
return choices[random(0 (choices.len - 1))]
}
let name = ""
let user_id = ""
if (USER_ID != null) {
name = `@{USER_USERNAME}`
user_id = `{USER_ID}`
} else {
let guest_id = Math:rnd(1, 100)
name = `ゲスト{guest_id}`
user_id = `guest_{guest_id}`
}
// 選択肢
let vehicle_types = [
"自動車"
"列車"
"船"
"潜水艇"
"飛行機"
"ヘリ"
]
let vehicle_powerunits = [
"石炭炉"
"原子炉"
"ディーゼル炉"
"ディーゼルエンジン"
"ジェットエンジン"
"バッテリー"
]
let message_templates = [
["今日の", "さんは", "を作ってください!動力源は", "です!"]
["今日の", "さんは", "を作ってみると運勢アップするかも?ラッキーアイテムは", "だって!"]
["", "さんは今日、", "を作ってみるのはどうでしょうか?", "を使うのがおすすめです"]
]
// シードが「ユーザーID+今日の日付」である乱数生成器を用意
let seed = `{user_id}{Date:year()}{Date:month()}{Date:day()}`
let random = Math:gen_rng(seed)
// ランダムに選択肢を選ぶ
let chosen_type = choose(random, vehicle_types)
let chosen_powerunit = choose(random, vehicle_powerunits)
let chosen_msg_template = choose(random, message_templates)
// 結果のテキスト
let m0 = chosen_msg_template[0]
let m1 = chosen_msg_template[1]
let m2 = chosen_msg_template[2]
let m3 = chosen_msg_template[3]
let tag = "#日替わりビークルおみくじ"
let result = `{m0}{name}{m1}**{chosen_type}**{m2}**{chosen_powerunit}**{m3}{Str:lf}{tag}`
// UIを表示
Ui:render([
Ui:C:container({
align: 'center'
children: [
Ui:C:mfm({ text: result })
Ui:C:postFormButton({
text: "投稿する"
rounded: true
primary: true
form: {
text: `{result}{Str:lf}{THIS_URL}`
}
})
]
})
])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment