Đỗ Quang Hiếu

#hashtag
1.277
19 theo dõi 26 bạn
Thông tin
Link tài khoản:
Xem trên Lazigo
0 câu hỏi | 4 trả lời
0đ thực lực | 3đ cảm ơn
Huy hiệu Chuyên cần:
Khởi đầu
Khởi đầu
Khám phá
Khám phá
Rèn luyện
Rèn luyện
Thử thách
Thử thách
Huy hiệu Lượt xem:
Gió
Gió
Bảng huy hiệu (+)
9 - 4 - 2010
Học lực: Giỏi
Cấp học:
Môn học yêu thích: Tin học
Tình trạng: Chưa xác định
Sở thích: Chưa xác định
Quận 1 - TP. Hồ Chí Minh
Đăng nhập để xem thông tin
Đăng nhập để xem thông tin
Đăng nhập để xem thông tin
Đăng nhập để xem thông tin
Đăng nhập để xem thông tin
Đăng nhập để xem thông tin
Đăng nhập để xem thông tin
Đăng nhập để xem thông tin
Đăng nhập để xem thông tin
Đăng nhập để xem thông tin
Đã tham gia: 09-08-2021
Số ngày hoạt động: 144 ngày
Ảnh nền
Báo cáo vi phạm
4.8
86 sao / 18 đánh giá
5 sao - 17 đánh giá
4 sao - 0 đánh giá
3 sao - 0 đánh giá
2 sao - 0 đánh giá
1 sao - 1 đánh giá
Điểm 4.8 SAO trên tổng số 18 đánh giá
Đỗ Quang Hiếu
Link | Report
2023-09-06 19:43:00
Chat Online
1 0
no name | Chat Online Report
bro?
0 0
Đăng nhập tài khoản để có thể bình luận cho nội dung này!

Đăng ký | Đăng nhập

Đỗ Quang Hiếu
Link | Report
2023-09-01 18:10:54
Chat Online

GameSettings.physicsSectorSize=0

GameSettings.physicsSectorSize=100
 

0 0
Đăng nhập tài khoản để có thể bình luận cho nội dung này!

Đăng ký | Đăng nhập

Đỗ Quang Hiếu
Link | Report
2023-08-31 13:19:41
Chat Online
0 0
Đăng nhập tài khoản để có thể bình luận cho nội dung này!

Đăng ký | Đăng nhập

Đỗ Quang Hiếu
Link | Report
2023-08-30 20:31:33
Chat Online
0 0
Đăng nhập tài khoản để có thể bình luận cho nội dung này!

Đăng ký | Đăng nhập

Đỗ Quang Hiếu
Link | Report
2023-08-28 19:50:10
Chat Online
  1. // ==UserScript==
  2. // @name Duolingo-Cheat-Tool
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.2
  5. // @description Auto answer Duolingo script!
  6. // @author tranphuquy19
  7. // @match https://www.duolingo.com/lesson*
  8. // @match https://www.duolingo.com/learn*
  9. // @icon https://www.google.com/s2/favicons?domain=duolingo.com
  10. // @grant none
  11. // @run-at document-end
  12. // ==/UserScript==
  13.  
  14. // WARNING/DISCLAIMER: Cheating can lead to account ban. The script is research-oriented in programming.
  15. // Enjoy learning new languages. Thank you!
  16. // Update 2023-Aug-07: Fix bug, add new challenge types
  17.  
  18.  
  19. const DEBUG = true;
  20. // let AUTO_PRACTICE = localStorage.getItem('AUTO_PRACTICE') === 'true' ? true : false; // earn exp by practice
  21. let AUTO_PRACTICE = false;
  22. let mainInterval;
  23. let practiceInterval;
  24.  
  25. const dataTestComponentClassName = 'e4VJZ';
  26.  
  27. const TIME_OUT = 1000;
  28.  
  29. // Challenge types
  30. const CHARACTER_SELECT_TYPE = 'characterSelect';
  31. const CHARACTER_MATCH_TYPE = 'characterMatch';
  32. const MATCH_TYPE = 'match';
  33. const TRANSLATE_TYPE = 'translate';
  34. const LISTEN_TAP_TYPE = 'listenTap';
  35. const NAME_TYPE = 'name';
  36. const COMPLETE_REVERSE_TRANSLATION_TYPE = 'completeReverseTranslation';
  37. const LISTEN_TYPE = 'listen';
  38. const SELECT_TYPE = 'select';
  39. const JUDGE_TYPE = 'judge';
  40. const FORM_TYPE = 'form';
  41. const LISTEN_COMPREHENSION_TYPE = 'listenComprehension';
  42. const READ_COMPREHENSION_TYPE = 'readComprehension';
  43. const CHARACTER_INTRO_TYPE = 'characterIntro';
  44. const DIALOGUE_TYPE = 'dialogue';
  45. const SELECT_TRANSCRIPTION_TYPE = 'selectTranscription';
  46. const SPEAK_TYPE = 'speak';
  47. const SELECT_PRONUNCIATION_TYPE = 'selectPronunciation';
  48. const ASSIST_TYPE = 'assist';
  49. const LISTEN_MATCH_TYPE = 'listenMatch';
  50. const LISTEN_COMPLETE_TYPE = 'listenComplete';
  51.  
  52. // Query DOM keys
  53. const CHALLENGE_CHOICE_CARD = '[data-test="challenge-choice"]';
  54. const CHALLENGE_CHOICE = '[data-test="challenge-choice"]';
  55. const CHALLENGE_TRANSLATE_INPUT = '[data-test="challenge-translate-input"]';
  56. const CHALLENGE_LISTEN_TAP = '[data-test="challenge-listenTap"]';
  57. const CHALLENGE_JUDGE_TEXT = '[data-test="challenge-judge-text"]';
  58. const CHALLENGE_TEXT_INPUT = '[data-test="challenge-text-input"]';
  59. const CHALLENGE_TAP_TOKEN = '[data-test*="-challenge-tap-token"]';
  60. const PLAYER_NEXT = '[data-test="player-next"]';
  61. const PLAYER_SKIP = '[data-test="player-skip"]';
  62. const BLAME_INCORRECT = '[data-test="blame blame-incorrect"]';
  63. const CHARACTER_MATCH = '[data-test="challenge challenge-characterMatch"]';
  64. const PRACTICE_BTN = '[data-test="global-practice"]';
  65.  
  66. const clickEvent = new MouseEvent('click', {
  67. view: window,
  68. bubbles: true,
  69. cancelable: true
  70. });
  71.  
  72. function getChallengeObj(theObject) {
  73. let result = null;
  74. if (theObject instanceof Array) {
  75. for (let i = 0; i < theObject.length; i++) {
  76. result = getChallengeObj(theObject[i]);
  77. if (result) {
  78. break;
  79. }
  80. }
  81. }
  82. else {
  83. for (let prop in theObject) {
  84. if (prop == 'challenge') {
  85. if (typeof theObject[prop] == 'object') {
  86. return theObject;
  87. }
  88. }
  89. if (theObject[prop] instanceof Object || theObject[prop] instanceof Array) {
  90. result = getChallengeObj(theObject[prop]);
  91. if (result) {
  92. break;
  93. }
  94. }
  95. }
  96. }
  97. return result;
  98. }
  99.  
  100. function getChallenge() {
  101. // const dataTestComponentClassName = 'e4VJZ';
  102. const dataTestDOM = document.getElementsByClassName(dataTestComponentClassName)[0];
  103.  
  104. if (!dataTestDOM) {
  105. document.querySelectorAll(PLAYER_NEXT)[0].dispatchEvent(clickEvent);
  106. return null;
  107. } else {
  108. const dataTestAtrr = Object.keys(dataTestDOM).filter(att => /^__reactProps/g.test(att))[0];
  109. const childDataTestProps = dataTestDOM[dataTestAtrr];
  110. const { challenge } = getChallengeObj(childDataTestProps);
  111. if (DEBUG) console.log('challenge', challenge);
  112. return challenge;
  113. }
  114. }
  115.  
  116. function nextQuestion() {
  117. // document.dispatchEvent(new KeyboardEvent('keydown', { 'keyCode': 13, 'which': 13 }));
  118. document.querySelectorAll(PLAYER_NEXT)[0].dispatchEvent(clickEvent);
  119. }
  120.  
  121. function dynamicInput(element, msg) {
  122. let input = element;
  123. let lastValue = input.value;
  124. input.value = msg;
  125. let event = new Event('input', { bubbles: true });
  126. // hack React15
  127. event.simulated = true;
  128. // hack React16 内部定义了descriptor拦截value,此处重置状态
  129. let tracker = input._valueTracker;
  130. if (tracker) {
  131. tracker.setValue(lastValue);
  132. }
  133. input.dispatchEvent(event);
  134. }
  135.  
  136. function classify() {
  137. const challenge = getChallenge();
  138. if (!challenge) return;
  139. if (DEBUG) console.log(`${challenge.type}`, challenge);
  140. switch (challenge.type) {
  141. case SELECT_PRONUNCIATION_TYPE:
  142. case READ_COMPREHENSION_TYPE:
  143. case LISTEN_COMPREHENSION_TYPE:
  144. case ASSIST_TYPE:
  145. case FORM_TYPE: { // trắc nghiệm 1 đáp án
  146. const { choices, correctIndex } = challenge;
  147. if (DEBUG) console.log('READ_COMPREHENSION LISTEN_COMPREHENSION FORM ASSIST', { choices, correctIndex });
  148. document.querySelectorAll(CHALLENGE_CHOICE)[correctIndex].dispatchEvent(clickEvent);
  149. return { choices, correctIndex };
  150. }
  151.  
  152. case SELECT_TYPE:
  153. case CHARACTER_SELECT_TYPE: { // trắc nghiệm 1 đáp án
  154. const { choices, correctIndex } = challenge;
  155. if (DEBUG) console.log('SELECT CHARACTER_SELECT', { choices, correctIndex });
  156. document.querySelectorAll(CHALLENGE_CHOICE_CARD)[correctIndex].dispatchEvent(clickEvent);
  157. return { choices, correctIndex };
  158. }
  159.  
  160. case MATCH_TYPE: {
  161. const { pairs } = challenge;
  162. // remove all span tag element
  163. const tokens = Array.from(document.querySelectorAll(CHALLENGE_TAP_TOKEN)).filter(token => token.tagName !== 'SPAN');
  164. pairs.forEach((pair) => {
  165. for (let i = 0; i < tokens.length; i++) {
  166. const _innerText = tokens[i].innerText.split('\n')[1];
  167. if (_innerText === pair.fromToken || _innerText === pair.learningToken) {
  168. tokens[i].dispatchEvent(clickEvent);
  169. }
  170. }
  171. })
  172. return { pairs };
  173. }
  174.  
  175. case LISTEN_MATCH_TYPE: {
  176. const { pairs } = challenge;
  177. const tokens = Array.from(document.querySelectorAll(CHALLENGE_TAP_TOKEN));
  178. // click 2 token has same attribute 'data-test'
  179. for (let i = 0; i < tokens.length; i++) {
  180. const firstToken = tokens[i];
  181. for (let j = i + 1; j < tokens.length; j++) {
  182. const secondToken = tokens[j];
  183. if (firstToken.getAttribute('data-test') === secondToken.getAttribute('data-test')) {
  184. firstToken.dispatchEvent(clickEvent);
  185. secondToken.dispatchEvent(clickEvent);
  186. }
  187. }
  188. }
  189. return { pairs };
  190. }
  191.  
  192.  
  193.  
  194. case CHARACTER_MATCH_TYPE: { // tập hợp các cặp thẻ
  195. const { pairs } = challenge;
  196. const tokens = document.querySelectorAll(CHALLENGE_TAP_TOKEN);
  197. pairs.forEach((pair) => {
  198. for (let i = 0; i < tokens.length; i++) {
  199. const _innerText = tokens[i].innerText.split('\n')[1];
  200. if (_innerText === pair.transliteration || _innerText === pair.character) {
  201. tokens[i].dispatchEvent(clickEvent);
  202. }
  203. }
  204. })
  205. return { pairs };
  206. }
  207.  
  208. case TRANSLATE_TYPE: {
  209. const { correctTokens, correctSolutions } = challenge;
  210. if (correctTokens) {
  211. if (DEBUG) console.log('TRANSLATE_correctTokens', { correctTokens });
  212. const tokens = document.querySelectorAll(CHALLENGE_TAP_TOKEN);
  213. let ignoreTokeIndexes = [];
  214. for (let correctTokenIndex in correctTokens) {
  215. for (let tokenIndex in tokens) {
  216. const token = tokens[tokenIndex];
  217. if (ignoreTokeIndexes.includes(tokenIndex)) continue;
  218. if (token.innerText === correctTokens[correctTokenIndex]) {
  219. token.dispatchEvent(clickEvent);
  220. ignoreTokeIndexes.push(tokenIndex);
  221. if (DEBUG) console.log(`correctTokenIndex [${correctTokens[correctTokenIndex]}] - tokenIndex [${token.innerText}]`);
  222. break;
  223. };
  224. }
  225. }
  226. } else if (!!correctSolutions) {
  227. if (DEBUG) console.log('TRANSLATE_correctSolutions', { correctSolutions });
  228. let textInputElement = document.querySelectorAll(CHALLENGE_TRANSLATE_INPUT)[0];
  229. dynamicInput(textInputElement, correctSolutions[0]);
  230. }
  231.  
  232. return { correctTokens };
  233. }
  234.  
  235. case NAME_TYPE: { // nhập đán án
  236. const { correctSolutions } = challenge;
  237. if (DEBUG) console.log('NAME', { correctSolutions });
  238. let textInputElement = document.querySelectorAll(CHALLENGE_TEXT_INPUT)[0];
  239. let correctSolution = correctSolutions[0];
  240. dynamicInput(textInputElement, correctSolution);
  241. return { correctSolutions };
  242. }
  243.  
  244. case COMPLETE_REVERSE_TRANSLATION_TYPE: { // điền vào từ còn thiếu
  245. const { displayTokens } = challenge;
  246. if (DEBUG) console.log('COMPLETE_REVERSE_TRANLATION', { displayTokens });
  247. const { text } = displayTokens.filter(token => token.isBlank)[0];
  248. let textInputElement = document.querySelectorAll(CHALLENGE_TEXT_INPUT)[0];
  249. dynamicInput(textInputElement, text);
  250. return { displayTokens };
  251. }
  252.  
  253. case LISTEN_TAP_TYPE: {
  254. const { correctTokens } = challenge;
  255. if (DEBUG) console.log('LISTEN_TAP', { correctTokens });
  256. const tokens = document.querySelectorAll(CHALLENGE_TAP_TOKEN);
  257. const ignoreTokens = [];
  258. for (let i = 0; i < correctTokens.length; i++) {
  259. for (let j = 0; j < tokens.length; j++) {
  260. if (tokens[j].innerText === correctTokens[i] && !ignoreTokens.includes(j)) {
  261. ignoreTokens.push(j);
  262. tokens[j].dispatchEvent(clickEvent);
  263. break;
  264. }
  265. }
  266. }
  267. return { correctTokens };
  268. }
  269.  
  270. case LISTEN_COMPLETE_TYPE: {
  271. const { displayTokens } = challenge;
  272. if (DEBUG) console.log('LISTEN_COMPLETE', { displayTokens });
  273. let textInputElement = document.querySelectorAll(CHALLENGE_TEXT_INPUT)[0];
  274. const correctAnswer = displayTokens.find(token => token.isBlank).text;
  275. dynamicInput(textInputElement, correctAnswer);
  276. return { displayTokens };
  277. }
  278.  
  279. case LISTEN_TYPE: { // nghe và điền vào ô input
  280. const { prompt } = challenge;
  281. if (DEBUG) console.log('LISTEN', { prompt });
  282. let textInputElement = document.querySelectorAll(CHALLENGE_TRANSLATE_INPUT)[0];
  283. dynamicInput(textInputElement, prompt);
  284. return { prompt };
  285. }
  286.  
  287. case JUDGE_TYPE: { // trắc nghiệm 1 đáp án
  288. const { correctIndices } = challenge;
  289. if (DEBUG) console.log('JUDGE', { correctIndices });
  290. document.querySelectorAll(CHALLENGE_JUDGE_TEXT)[correctIndices[0]].dispatchEvent(clickEvent);
  291. return { correctIndices };
  292. }
  293.  
  294. case DIALOGUE_TYPE:
  295. case CHARACTER_INTRO_TYPE: { // trắc nghiệm 1 đáp án
  296. const { choices, correctIndex } = challenge;
  297. if (DEBUG) console.log('DIALOGUE CHARACTER_INTRO', { choices, correctIndex });
  298. document.querySelectorAll(CHALLENGE_JUDGE_TEXT)[correctIndex].dispatchEvent(clickEvent);
  299. return { choices, correctIndex };
  300. }
  301.  
  302. case SELECT_TRANSCRIPTION_TYPE: {
  303. const { choices, correctIndex } = challenge;
  304. if (DEBUG) console.log('DIALOGUE CHARACTER_INTRO', { choices, correctIndex });
  305. document.querySelectorAll(CHALLENGE_JUDGE_TEXT)[correctIndex].dispatchEvent(clickEvent);
  306. return { choices, correctIndex };
  307. }
  308.  
  309. case SPEAK_TYPE: {
  310. const { prompt } = challenge;
  311. if (DEBUG) console.log('SPEAK', { prompt });
  312. document.querySelectorAll(PLAYER_SKIP)[0].dispatchEvent(clickEvent);
  313. return { prompt };
  314. }
  315.  
  316. default:
  317. break;
  318. }
  319. }
  320.  
  321. function breakWhenIncorrect() {
  322. const isBreak = document.querySelectorAll(BLAME_INCORRECT).length > 0;
  323. if (isBreak) {
  324. console.log('Incorrect, stopped');
  325. clearInterval(mainInterval);
  326. };
  327. }
  328.  
  329. function clickPracticeButton() {
  330. try {
  331. document.querySelectorAll(PRACTICE_BTN)[0].dispatchEvent(clickEvent);
  332. } catch (e) {
  333. console.log(e);
  334. }
  335. }
  336.  
  337. function main() {
  338. try {
  339. let isPlayerNext = document.querySelectorAll(PLAYER_NEXT)[0].textContent.toUpperCase();
  340. if (isPlayerNext.valueOf() !== 'CONTINUE') {
  341. classify();
  342. breakWhenIncorrect()
  343. nextQuestion();
  344. }
  345. setTimeout(nextQuestion, 150);
  346.  
  347. } catch (e) {
  348. console.log(e);
  349. }
  350. }
  351.  
  352. function solveChallenge() {
  353. AUTO_PRACTICE = localStorage.getItem('AUTO_PRACTICE') || false; // earn exp by practice
  354. if (AUTO_PRACTICE && [removed].href.endsWith('/learn')) {
  355. // click practice button
  356. practiceInterval = setTimeout(clickPracticeButton, 5000);
  357. }
  358. mainInterval = setInterval(main, TIME_OUT);
  359. console.log(`to stop run this command clearInterval(${mainInterval})`);
  360. }
  361.  
  362. // solveChallenge();
  363. (solveChallenge)();
0 0
Đỗ Quang Hiếu | Chat Online Report
code hack duolingo ó
0 0
Yellowhatguy | Chat Online Report
tao chỉ cần ngồi xem à mày
0 0
Đỗ Quang Hiếu | Chat Online Report
Ừ đứng zậy
1 0
Đăng nhập tài khoản để có thể bình luận cho nội dung này!

Đăng ký | Đăng nhập

Đỗ Quang Hiếu
Link | Report
2023-08-26 17:26:07
Chat Online
1 0
Sayara | Chat Online Report
-Đã like! Like hộ tus đầu?
​-Tt chéo?
0 0
Yellowhatguy | Chat Online Report
làm speakerman nha
0 0
Đăng nhập tài khoản để có thể bình luận cho nội dung này!

Đăng ký | Đăng nhập

Đỗ Quang Hiếu
Link | Report
2023-07-20 19:08:30
Chat Online
0 0
Đăng nhập tài khoản để có thể bình luận cho nội dung này!

Đăng ký | Đăng nhập

Đỗ Quang Hiếu
Link | Report
2023-07-20 19:05:44
Chat Online
1 0
Đăng nhập tài khoản để có thể bình luận cho nội dung này!

Đăng ký | Đăng nhập

Đỗ Quang Hiếu
Link | Report
2023-07-20 19:05:14
Chat Online
1 0
Yellowhatguy | Chat Online Report
ủa mày bê đê à
0 0
Đăng nhập tài khoản để có thể bình luận cho nội dung này!

Đăng ký | Đăng nhập

Đỗ Quang Hiếu
Link | Report
2023-07-20 19:04:47
Chat Online
0 0
Đăng nhập tài khoản để có thể bình luận cho nội dung này!

Đăng ký | Đăng nhập

×
Mua sắm
+Gửi câu hỏi LAZI MALL
+500xu
×