mirror of
https://dev.narayana.im/narayana/telegabber.git
synced 2026-08-05 12:17:06 +00:00
Return 403 on join if banned from a group
This commit is contained in:
parent
06645eaa8c
commit
d5c1d6ff2a
2 changed files with 40 additions and 0 deletions
|
|
@ -2857,6 +2857,39 @@ func (c *Client) IsMessageSendingPermitted(permissions *client.ChatPermissions)
|
|||
permissions.CanSendOtherMessages
|
||||
}
|
||||
|
||||
// GetMyStatusInChat checks the membership status of current account in the given chat
|
||||
func (c *Client) GetMyStatusInChat(chatID int64) ChatMemberStatus {
|
||||
if c.me == nil {
|
||||
return ChatMemberStatusIllegal
|
||||
}
|
||||
|
||||
member, err := c.client.GetChatMember(&client.GetChatMemberRequest{
|
||||
ChatId: chatID,
|
||||
MemberId: &client.MessageSenderUser{UserId: c.me.Id},
|
||||
})
|
||||
if err != nil {
|
||||
return ChatMemberStatusIllegal
|
||||
}
|
||||
return c.getChatMemberStatus(member.Status)
|
||||
}
|
||||
|
||||
func (c *Client) getChatMemberStatus(status client.ChatMemberStatus) ChatMemberStatus {
|
||||
switch status.ChatMemberStatusType() {
|
||||
case client.TypeChatMemberStatusCreator, client.TypeChatMemberStatusAdministrator:
|
||||
return ChatMemberStatusPromoted
|
||||
case client.TypeChatMemberStatusMember:
|
||||
return ChatMemberStatusUnbanned
|
||||
case client.TypeChatMemberStatusRestricted:
|
||||
return ChatMemberStatusMuted
|
||||
case client.TypeChatMemberStatusLeft:
|
||||
return ChatMemberStatusKicked
|
||||
case client.TypeChatMemberStatusBanned:
|
||||
return ChatMemberStatusBanned
|
||||
}
|
||||
|
||||
return ChatMemberStatusIllegal
|
||||
}
|
||||
|
||||
// GetErrorCode obtains an error code from a Telegram response error
|
||||
func GetErrorCode(err error) (int32, bool) {
|
||||
responseError, ok := err.(client.ResponseError)
|
||||
|
|
|
|||
|
|
@ -595,6 +595,13 @@ func handleMUCPresence(s xmpp.Sender, p stanza.Presence, mucExt stanza.MucPresen
|
|||
return
|
||||
}
|
||||
|
||||
status := session.GetMyStatusInChat(chatId)
|
||||
// TODO: seems to be impossible for basic groups, check back when supergroups are supported
|
||||
if status == telegram.ChatMemberStatusBanned {
|
||||
presenceReplySetError(reply, 403)
|
||||
return
|
||||
}
|
||||
|
||||
log.Debugf("%#v", mucExt)
|
||||
maxStanzas, maxStanzasOk := mucExt.History.MaxStanzas.Get()
|
||||
maxChars, maxCharsOk := mucExt.History.MaxChars.Get()
|
||||
|
|
|
|||
Loading…
Reference in a new issue