1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
import requests
import clipboard
from odoo import models, fields, api
from telethon.sessions import StringSession
from telethon.sync import TelegramClient
from telethon import functions, types
from telethon.tl.types import InputChannel, InputPeerChannel
import asyncio
from telethon.tl.functions.messages import SendMessageRequest
class WebsiteTelegram(models.Model):
_name = 'website.telegram'
_description = 'Telegram Channel'
tittle = fields.Char("Channel Title")
username = fields.Char("Channel Name")
id_data = fields.Char("Channel ID")
about = fields.Char("Channel Description")
is_broadcast = fields.Boolean("Is Broadcast", default=True)
is_megagroup = fields.Boolean("Is Megagroup", default=False)
# session_string = 'MIIBCgKCAQEAyMEdY1aR+sCR3ZSJrtztKTKqigvO/vBfqACJLZtS7QMgCGXJ6XIRyy7mx66W0/sOFa7/1mAZtEoIokDP3ShoqF4fVNb6XeqgQfaUHd8wJpDWHcR2OFwvplUUI1PLTktZ9uW2WE23b+ixNwJjJGwBDJPQEQFBE+vfmH0JP503wr5INS1poWg/j25sIWeYPHYeOrFp/eXaqhISP6G+q2IeTaWTXpwZj4LzXq5YOpk4bYEQ6mvRq7D1aHWfYmlEGepfaYR8Q0YqvvhYtMte3ITnuSJs171+GDqpdKcSwHnd6FudwGO4pcCOj4WcDuXc2CTHgH8gFTNhp/Y8/SpDOhvn9QIDAQAB'
def create_channel(self, *args, **kwargs):
asyncio.run(self._async_create_channel())
async def _async_create_channel(self):
async with TelegramClient(StringSession('1BVtsOJABu30MWCBFwYvvaYbFoIWi43r5a7TUZ2IWwrnSlXIwEhJS5k2y4UKjoDeMPKwhgUWn9lMk02zQjM0ZDzq61YyhkRBvZuu3hCxMsrtP92bkuZtL2g3g1VgI8s7rMhOD_WaGrZbuj-TmbTwIEbN5i1J4raDW2kYzmlLRCbT74xxrGjpzWCnVv7CSS9L2juXuut0lLMgli3_JZbqDO1IyBYh4ZFQYbMf7zv6moDR4MQp1qfnFArsikQcfxjlNXKFcSoyA_GjiIFfCuymwQVtdERXOAH03M_lm8fYbjvgxEkJvxR6hdCnYMcKpIujEEo9SmMmK7Vnl29g1TCPO5tlrDNXq3Ng='), 27799517, 'df8ee44b0ed11108245037d47b511201') as client:
result = await client(functions.channels.CreateChannelRequest(
title=self.tittle,
about=self.about,
broadcast=False,
megagroup=True,
))
channel = result.updates[3].message.peer_id
# username_to_add = ['@imsep81', '6285764475716', '@stephanchrst']
username_to_add = ['@imsep81']
for name in username_to_add:
user_to_add = await client.get_entity(name)
result = await client(functions.channels.InviteToChannelRequest(
channel=channel,
users=[user_to_add.id],
))
message = 'https://erp.indoteknik.com/web#id='+self.id_data+'&action=209&model=stock.picking&view_type=form&cids=1&menu_id=101'
result = await client(SendMessageRequest(channel, message))
result = client(functions.channels.UpdateUsernameRequest(
channel=channel,
username='@indoJaya21'
))
print(result.stringify())
def receive_messages(self):
asyncio.run(self._async_receive_messages())
async def _async_receive_messages(self):
async with TelegramClient(StringSession('1BVtsOJABu30MWCBFwYvvaYbFoIWi43r5a7TUZ2IWwrnSlXIwEhJS5k2y4UKjoDeMPKwhgUWn9lMk02zQjM0ZDzq61YyhkRBvZuu3hCxMsrtP92bkuZtL2g3g1VgI8s7rMhOD_WaGrZbuj-TmbTwIEbN5i1J4raDW2kYzmlLRCbT74xxrGjpzWCnVv7CSS9L2juXuut0lLMgli3_JZbqDO1IyBYh4ZFQYbMf7zv6moDR4MQp1qfnFArsikQcfxjlNXKFcSoyA_GjiIFfCuymwQVtdERXOAH03M_lm8fYbjvgxEkJvxR6hdCnYMcKpIujEEo9SmMmK7Vnl29g1TCPO5tlrDNXq3Ng='),
27799517, 'df8ee44b0ed11108245037d47b511201') as client:
channel = await client.get_entity(self.username)
result = client(functions.channels.GetMessagesRequest(
channel=channel,
id=channel.chats
))
print(result.stringify())
def send_to_telegram(self, message):
# if self.env.all.registry.db_name == 'odoo016':return
# message = self.env.all.registry.db_name + " : " + message
# message = self.test_message
apiURL = f'https://api.telegram.org/bot{self.bot_name}/sendMessage'
try:
requests.post(apiURL, json={'chat_id': self.chatID, 'text': message})
except Exception as e:
print(e)
def test_send(self):
try:
self.env.cr.savepoint() #kembalikan database ke save point jika mengalami kesalahan
self.env['website.telegram'].search([('name', '=', self.name)])[0].send_to_telegram(self.test_message)
except Exception as e:
print(e)
@api.depends('name', 'chatID', 'bot_name')
def _calc_python_code(self):
for record in self:
if not record.name:
record.python_code = "pleas put a name"
elif not record.test_message:
record.test_message = "test"
else:
record.python_code = "self.env['website.telegram'].search([('name', '=', '" + record.name + "')])[0].send_to_telegram('" + record.test_message + "')"
def copy_chat_id(self):
record = self.browse(self.id)
clipboard.copy(record.python_code)
def paste_chat_id(self):
record = self.browse(self.id)
chat_id = clipboard.paste()
record.write({'chatID': chat_id})
def paste_bot_name(self):
record = self.browse(self.id)
bot_name = clipboard.paste()
record.write({'bot_name': bot_name})
def get_updates(self):
apiURL = f'https://api.telegram.org/bot{self.bot_name}/getUpdates'
try:
response = requests.get(apiURL)
updates = response.json()
return updates # Ini akan berisi semua pembaruan, termasuk pesan baru
except Exception as e:
print(e)
return None
# def receive_messages(self):
# updates = self.get_updates()
# if updates and 'result' in updates:
# for update in updates['result']:
# if 'text' in update['channel_post']:
# message_text = update['channel_post']['text']
# chat_id = update['channel_post']['chat']['id']
# chat_name = update['channel_post']['chat']['username']
# print(f"Received message: {message_text} from chat_id: {chat_id}, that is: {chat_name}")
|