/tmp/duangsuse.sock
23 subscribers
303 photos
3 videos
92 files
337 links
从 duangsuse::Echo (@dsuse) 跟进出来的分支,将在作者恢复原帐号访问的时候合并删除。
Download Telegram
机器人:

这个机器人在用户加群时,先封了发消息的权限,然后利用 inline button 验证用户是否是机器人

— 选择:
[message]
<i> 1+1 = ? </i>
[A] [B] [C]
[管理手动允许] [管理手动踢出]

前两行依赖的状态应当在一个子程序里设计,存储由 Telegram messager 包办
后两个本身没有属于它们自己的状态
三个操作只存在一个状态:目标操作用户,可以利用 Telegram message API 拿被回复者 ID 得到

状态:其实没有必要使用状态机模型,程序对每个新加用户只运行一次,并且状态由 Telegram 本身管理
机器人只是负责在状态转移时添加逻辑、捕获并且改变状态而已。

trigger onNewMember(u: User) {
blockUser(u)
val (truth, expr) = makeNewMathProblem()
val [fake0, fake1] = listOfNulls(2).map(::makeFakeSolution)
val board = Board( MathBoard(expr, truth, listOf(fake0, fake1) ) )
board.inlineQueryCallbacks = RELEASE_USER
u.replyTo(board).also { setTimerTo(kickUser(u), Config.NS) }
}

问题是,机器人要处理状态还是有的,就是每个 (NEWCOMER) 用户都对应一个 timer(当然还有 Telegram 本身需要存储的部分信息,比如机器人对加群消息的回复,不过这个状态写成代码不明显),ns 后会直接视为机器人踢出
这种情况

状态是什么呢?状态是不能在一次里,由 signal handler 解决的东西,比如数据的存储,是一种处理上下文。
它意味着处理的决策条件跨越了一次处理的生存周期,必须在多次处理间都可以被访问到。

对于每个用户来说,机器人的出现赋予了他们一个新状态转移图:
NEWCOMER=BLOCKED(0), ACCEPTED, REJECTED
NEWCOMER (pass / adminAccept)~> ACCEPTED
NEWCOMER (timeout ns / adminReject) ~> REJECTED

listen onNewComer(uimesg) { block(uimesg.user), sendBoard(uimesg), save[uimesg.u] = setTimeOutKicker }
listen onPass / adminAccept (u) { save[u].cancel() } // ACCEPTED
listen adminReject (u) { kick(u) }
listen* save.onTimedout(it) { kick(it) }

其中 timeout 也是一种状态(准确的说只是实现它需要状态计数,当然这本身是抽象的),是一个异步信号(当然其他几个也都是异步的,一般来说,同步信号的意味是『它只是一个可以 inline 的子程序』)

从用户可能的状态转移图来看,逻辑也很明显了,就是存储的分配、模块的细分、逻辑和数据依赖还需要思考

NEWCOMER (merge = Telegram::User on NewMember)
/ \
| |
tout, |
akick |
| |
| (pass, aac)
REJ AC
(block) (ignore him)


这些『NEWCOMER』的用户状态转移就构成了机器人的 stateful 逻辑
Forwarded from Deleted Account
您已通过验证,欢迎加入 LetITFly's Group 喵!
如果仍然无法发言,请重启 Telegram 客户端。
#life #emmm 五道口男子职业技术学院?!
This media is not supported in your browser
VIEW IN TELEGRAM
学了三四个月 = 入门 Haskeller

我不知道还有 Strict, BangPattern, GHC-OPTIONS 这几个 Pragma...
我只知道虽然 [Char] 很浪费内存空间效能低,以及有 bytestring,不知道还有 Data.Text 和 Data.Text.IO....

我不知道还有 Strict 求值模式... 我以为只能惰性求值的(当然现在解释器那块基本可以说是无障碍了,毕竟三种求值模型 name, need, expr 还是在 AST Walker 里毕竟 trivial 的,内嵌 AST 基本就可以了、Lexical Scoping 我现在了解了 Scheme 系直接 copy 一份栈 env 的实现,Lua 的 UpValue 实现)

我不知道居然还有 State MonadT 和 RealWorld.... 而且我现在对 Monad 很头疼,主要是想重视理论先的原因,而范畴论本身不太好理解...

Data.Vector.Unboxed.Mutable.MVector 我就更不知道了... 当然存在使用副作用模式的 Haskell 还是知道的(我很少写 IO,算法更不提了.... 公式好像都难背)。

我不知道怎么用 Monad Transformer(State 和 GHC.Prim.RealWorld),而且我现在对 Monad 的理解还在想办法合并,本身使用上除了 convert do notation 外没啥暖用了,Identity/Reader Monad (算是 Haskeller Monad primer 的 Helloworld...)也是才写一次... 还不能完全默写

读入优化那个解析程序是我昨天刚说的,各种自闭,膜拜 hs 大佬...

我真的很佩服蛤丝靠大佬,怎么就那么 ****** 啊!!!!!(土拨鼠尖叫) 😭
/tmp/duangsuse.sock
#oi #oj https://www.luogu.org/problem/P3367 推荐一个题目
https://www.luogu.org/discuss/show/125819

啊啊啊啊我死了,楼主 HT(被冰封哥称为萝莉大佬)据说还是个高中还是初中生啊... 拿 Haskell 写并查集....
This media is not supported in your browser
VIEW IN TELEGRAM
#Algorithm 学到了 [origin]
并查集的本质是维护一个森林,把森林里的树合并。只要是达到这个目的都可以。但是初始化成自己的父节点的话会更容易理解并查集的本质。
/tmp/duangsuse.sock
#Algorithm 学到了 [origin] 并查集的本质是维护一个森林,把森林里的树合并。只要是达到这个目的都可以。但是初始化成自己的父节点的话会更容易理解并查集的本质。
#China #OI 我真的服了,线上一大堆求助 TLE 的,他们是不知道还有效率复杂度需求么,还有莫名其妙什么『哪错了』『求助』这种帖子,我去
中国式 OI 平均水平:难度普及- 组能抄代码都 1/2 AC
/tmp/duangsuse.sock
#China #OI 我真的服了,线上一大堆求助 TLE 的,他们是不知道还有效率复杂度需求么,还有莫名其妙什么『哪错了』『求助』这种帖子,我去
『 好像洛谷java没有额外的时间空间是吗?』『并查集一定要初始化自己为自己爹吗』这种标题叫 OK 的标题
『 求助,只有1和4两个点过了,其他全wa』『 新人求教???』叫还行的标题
『 为什么70啊』『为何错了』『哪错了』 谁会做这题?』叫傻标题
Forwarded from Deleted Account
冰封说是 Scope 是 CPS(Continuation-Passing-Style) 出来的 context... 我想想
不像我这个辣鸡,人家现在回复不需要两分钟,两秒就得去忙别的了...
Forwarded from Deleted Account
Kotlin Coroutine

刚才我甚至已经弱智到忘了携程是咋执行的了... 的确是串行的
Forwarded from Deleted Account
果然还是实践很重要啊,理论就考虑不到这种问题,GlobalScope 还和本地的 runBlocking scope 有区别...
 调⽤了 runBlocking 的主线程会⼀直阻塞 直到 runBlocking 内部的协程执⾏完毕。
Forwarded from Deleted Account
非对称协程我都忘了,居然还有这种东西... 还存在一个 scope 和父子协程.... 那父协程可以叫醒儿子儿子不能反了爸爸,爸等(timer.await())儿,独立再调教一下(GlobalScope.async { timer = delay(3000) }),完美... 这个 Scope 的直觉又是啥子
Deleted Account
冰封说是 Scope 是 CPS(Continuation-Passing-Style) 出来的 context... 我想想 不像我这个辣鸡,人家现在回复不需要两分钟,两秒就得去忙别的了...
携程本身就是 CPS 吧(实现起来麻烦一点,要 capture 执行状态,整个数据栈包括然后指令的执行状态也得包括)... 这么说是那种... 对爸爸的数据依赖?
This media is not supported in your browser
VIEW IN TELEGRAM